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. -- Leandro Lucarella (AKA luca) http://llucax.com.ar/ ---------------------------------------------------------------------- GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05) ---------------------------------------------------------------------- ¿Qué será lo que hace que una brújula siempre marque el norte? - Ser aguja, nada más, y cumplir su misión. -- Ricardo Vaporeso
