2010-12-16 11 views
8

Eric Lippert ha escrito un artículo sobre Why no var on fields? en C#. Tenía curiosidad, ¿seremos capaces de hacer eso en C++ 0x? ex.¿Es posible hacer lo siguiente con auto en C++ 0x?

struct mystruct_t 
{ 
    auto i = 0, d = 0.0, s = std::string("zero"); 
}; 

No he podido encontrar una respuesta a través del último borrador, lo siento.

Gracias,

+0

No creo que se permita el auto allí. Pero incluso si lo fuera, esto no funcionaría porque daría como resultado una falla de deducción. Para los tres casos, 'auto' tiene que ser del mismo tipo. – sellibitze

+0

Entonces ponerlos en declaraciones separadas está bien? Quiero decir, ¿podemos usar auto de todos modos dentro de una estructura como la que mostré en el ejemplo? – AraK

+4

No sé por qué esto es downvoted. Parece una pregunta válida. –

Respuesta

12

Lamentablemente no se puede. La especificación dice en 7.1.6.4/3 y sigue

De lo contrario, el tipo de la variable se deduce de su inicializador. El nombre de la variable que se está declarando no aparecerá en la expresión del inicializador. Este uso de auto se permite cuando se declaran variables en un bloque (6.3), en el ámbito del espacio de nombres (3.3.6) y en un enunciado for-init (6.5.3).

El especificador automático de tipo también se puede usar para declarar una variable en la condición de una instrucción de selección (6.4) o una instrucción de iteración (6.5), en el especificador de tipos en la identificación de tipo nuevo o type-id de una nueva expresión (5.3.4), en una declaración for-range, y en la declaración de un miembro de datos estáticos con un inicializador ortogonal o igual que aparece dentro de la especificación miembro de una definición de clase (9.4.2).

Un programa que usa auto en un contexto no explícitamente permitido en esta sección está mal formado.

No estoy seguro de por qué prohíben auto para los miembros de datos no estáticos, sería bastante útil.

+0

Tu respuesta parece mucho, mucho mejor que la mía. Tengo que encontrar tiempo para leer la especificación C++ 0x real ... –

+0

¿Cómo determinaría el compilador el tipo de miembros "automáticos" no estáticos? –

+0

Gracias @litb :) – AraK