@disable
Pelle Månsson
pelle.mansson at gmail.com
Sat Jan 16 05:00:00 PST 2010
On 01/16/2010 01:46 AM, Leandro Lucarella wrote:
> Ali Çehreli, el 15 de enero a las 16:01 me escribiste:
>>> 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? :)
>
> I don't think so. auto means in D the same that in C/C++, the difference
> is that D do type inference when a *storage class* is given. const,
> static, immutable, shared are other storage classs, so when you used
> them, you can infer the type too (if no type is given).
>
> You can do const auto c = 1; (I think), but I can't do static auto c = 1;
> (I think too). You can omit auto when declaring automatic variables if you
> specify the type (seen the other way :), because it defaults to auto. And
> you can omit the type if you use a storage class, because it defaults
> to the infered type.
>
Makes sense, but static auto totally works.
I think auto just means inferred type.
More information about the Digitalmars-d
mailing list