@disable
Ali Çehreli
acehreli at yahoo.com
Fri Jan 15 16:01:55 PST 2010
Jesse Phillips wrote:
>> Even the keyword 'auto' is C's defunct 'auto' in C++0x (and I strongly
>> belive also in D); just because "automatic variable" and "automatically
>> typed" both start with "auto". :)
>>
>> Ali
>
> If I'm not mistaken (surely I am), D's auto keyword is the same as C's.
C's auto is about lifetimes (storage duration). 'auto' makes function
local variables and parameters automatically terminated upon exit from
functions.
Since that's the default in C (and C++), 'auto' is redundant there.
That's why the keyword has been reused by C++0x to mean "infer the type".
> But D has type inference so we just state the storage class and not
the type.
>
> http://www.digitalmars.com/d/2.0/declaration.html#AutoDeclaration
It is news to me that the following works without 'auto':
struct S
{
int i;
this(int i)
{
this.i = i;
}
}
void main()
{
const c = S(42); // <-- no 'auto' needed
}
Now I realize that 'auto' is for when we want type inference for mutable
variables because this doesn't work:
c = S(42); // <-- compiler ERROR
So we have to use a keyword:
auto c = S(42);
++c.i;
If I understand it correctly, 'auto' serves as the nonexistent 'mutable'
keyword in this case.
I think to be consistent, I will continue using 'auto' even for when a
storage class is specified:
const auto c = S(42); // works too
For me, that gives 'auto' a single meaning: "the inferred type".
Do I get it right? :)
Ali
More information about the Digitalmars-d
mailing list