Re: "Concepts" were removed from C++0x
On Thu, 23 Jul 2009 09:30:21 +0200, tni <nobody@example.com> wrote:
Stephen Horne wrote:
Also, how exactly do you alias a variable without causing a
run-time overhead? What I tend to do is use a reference
variable...
thing_t& shortname (longname);
But in doing that, I'm risking a significant run-time overhead.
Often I don't care (not an inner loop etc), and very likely the
optimiser can eliminate that overhead anyway, but it's still a
potential issue that IMO should never exist.
I would argue that it's the other way around. Using the reference will
give the compiler the option to generate faster code in some cases.
E.g.
std::vector<size_t> blah;
blah.resize(20);
for(size_t i = 0; i < 50; i++) {
size_t& ref = blah[10];
ref += std::rand();
ref += std::rand();
}
That's not an alias - at least, not in the sense I'm using the word.
An alias is purely a new name - not a mechanism for precalculating a
subscripting operation, pointer dereferences, member selection or
whatever.
Obviously using a reference is a good thing in your example - and yes,
I use references like that from time to time.
Similarly, I might alias a constant by declaring a new constant. That
may have a run-time impact in terms of initialising that constant and
memory used to store it - as always, depending on the optimiser. You
could argue that the constant may be a faster and more readable than
repeating a constant expression over and over, but if your constant
expression does anything more than identify an existing constant, it
isn't an alias. An alias is a new name for something that already
exists and already has a name.
const int shortname = some_other_const_int; // an alias, sort of
const int shortname = some_other_const_int + 1; // NOT an alias