2010-05-17 18 views

Respuesta

12

Bjarne Stroustrup menciona en su C++0x FAQ sobre auto:.

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

Supongo que los compiladores no serán forzados por la norma a implementar el antiguo significado de auto.

42

Se romperá si su código contiene la palabra clave auto. En casi 30 años de programación C y C++, nunca me encontré con ninguno que lo hiciera. La palabra clave se introdujo en el primer compilador de C para especificar las variables de función locales, pero los compiladores se volvieron casi lo suficientemente listos como para no necesitarlo, y muy poco código que lo use sobrevivirá hoy; es por eso que C++ 0x eligió reciclarlo en lugar de introduzca una palabra clave nueva que podría causar problemas de portabilidad.

El propósito de la palabra clave auto en C++ 0X es permitir que el compilador de resolver el tipo de una variable, siempre que sea posible:

vector <int> v; 
auto it = v.begin(): 

el compilador puede ver que v.begin () debe devolver un vector<int>::iterator y así puede crear una variable de ese tipo, ahorrando una gran cantidad de creación de teclado o de definición de tipos.

+11

Eso es increíble, odio escribir iteradores vectoriales;) – identitycrisisuk

+0

¿Por qué romperá el código que contiene 'auto'? ¿El viejo significado todavía no es válido? – Motti

+0

@mottii Para ser sincero, no estoy seguro, un compilador puede ver que 'auto int i;' no se usa automáticamente en el nuevo sentido, pero no estoy seguro si el estándar lo requiere. –

8

En C, auto duración de almacenamiento automático especificado (a diferencia de static, extern, register). Como este es el valor predeterminado, nunca he visto auto usado en ningún código. Aunque no he hecho mucho C

2

Rara vez se utiliza; significaba una variable local. Los compiladores modernos como VS2010 C++ le dan un new meaning.

+3

Este nuevo significado es del estándar C++ 0x como se menciona anteriormente – Stewart

4

Esta respuesta es incorrecta, vea following question, estoy dejando la respuesta aquí como referencia. uso


yo sepa C++ de 0x de auto no contradice C uso tradicional de auto. En C auto se usa junto con el tipo.

auto char c1 = 'a'; // OK, old meaning of auto is still valid 
auto c2 = 'b'; // OK, new meaning of auto (deduce c2 is a char) 

El único lugar donde se puede cambiar el significado del código es cuando se utilizó automático junto con la implícita regla int (si no se especifica Type -> es un int), en cuyo caso la segunda línea en mi ejemplo solía tener c2 del tipo int y ahora es del tipo char.

+0

No se compila con g ++, FWIW. –

+0

Gracias @Neil, hice una nueva pregunta para averiguar quién tiene la razón (no puedo encontrar nada en el borrador de C++ 0x) – Motti

+1

Me sorprendió que no hayan permitido esto dado el resto de las otras verrugas en C++ por el bien de compatibilidad C ;) –

Cuestiones relacionadas