2012-08-29 14 views
5

cuestión teórica única - ¿por qué no puedo escribir dicho código:automática de palabras clave comportamiento extraño en C++ 11

auto auto foo = 0; 

Primera palabra clave auto - almacenamiento especificador de clase (sí, sé que es inútil y obsoleto en C++ 11), segunda palabra clave automática - especificador automático de tipo.

¿Qué pasa?

Y de nuevo, realmente no quiero usar esto en código real.

+0

Eche un vistazo a [dcl.spec.auto] en el estándar C++ 11. * 5: Un programa que usa auto en un contexto no explícitamente permitido en esta sección está mal formado. * No se menciona antes el uso de C++ 03. – chris

+0

Realmente eliminaron el antiguo significado de 'auto'. Vea mi propia pregunta: http://stackoverflow.com/questions/12093717/why-old-usage-c03-of-auto-does-not-compile-under-c11. Tal vez no relacionado, pero creo que esto es perfectamente válido: 'static auto a = 7;' – PiotrNycz

Respuesta

19

El especificador de clase de almacenamiento auto no es "inútil y obsoleto en C++ 11", se ha eliminado por completo. La palabra clave auto ya no es un especificador de clase de almacenamiento y no se puede usar como uno solo.

En C++ 11, auto es un especificador de tipo simple.

+0

Oh, veo: Cambio: Eliminar automático como un especificador de clase de almacenamiento – FrozenHeart

+2

Sí, es un cambio de ruptura, pero no importa porque el uso anterior de 'auto' (como un especificador de clase de almacenamiento) era superfluo. –

+0

¡Muchas gracias! – FrozenHeart

3

Desde el Stroustrup's FAQ:

.... El significado antiguo de automóvil ("esto es una variable local") es ahora ilegal. Varios miembros del comité analizaron millones de líneas del código, encontrando solo un puñado de usos, y la mayoría de ellos estaban en las suites de prueba o parecían ser errores.

Lo que indica que no se usa mucho código con "auto" como especificador de almacenamiento.