¿Cuál es el objetivo de la palabra clave "auto" en C? Con C++ 0x tiene un nuevo significado, pero ¿significa que mi código se romperá si transfiero el código C a un compilador de C++ 0x?Objetivo de la palabra clave "auto" de C
Respuesta
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
.
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.
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
Rara vez se utiliza; significaba una variable local. Los compiladores modernos como VS2010 C++ le dan un new meaning.
Este nuevo significado es del estándar C++ 0x como se menciona anteriormente – Stewart
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
.
No se compila con g ++, FWIW. –
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
Me sorprendió que no hayan permitido esto dado el resto de las otras verrugas en C++ por el bien de compatibilidad C ;) –
- 1. Uso de la palabra clave auto en C STL ++
- 2. Palabra clave auto de C++. ¿Por qué es magia?
- 3. Reescriba automáticamente palabra clave auto C++ 11 en tipos derivados
- 4. C: Comportamiento de la palabra clave `const`
- 5. C# ref uso de la palabra clave
- 6. Palabra clave protegida C#
- 7. C# palabra clave virtual
- 8. C++/CLI equivalente de la palabra clave 'readonly' de C#
- 9. C++ equivalente de la palabra clave "dinámica" de C# 4.0?
- 10. Falta la palabra clave 'con' en C#
- 11. C++: estructura y la nueva palabra clave
- 12. ¿Necesita C# la palabra clave privada?
- 13. palabra clave "agradable" en C++?
- 14. palabra clave 'fuera' en C++
- 15. C# palabra clave 'ref', rendimiento
- 16. palabra clave estática en C#
- 17. Registro palabra clave en C++
- 18. ¿Hay alguna palabra clave en Java que sea similar a la palabra clave 'AS' de C#
- 19. Vim palabra clave Finalización
- 20. ¿La nueva palabra clave 'dinámica' C# 4.0 desaprueba la palabra clave 'var'?
- 21. Equivalente de la palabra clave '#' de C# en Java
- 22. Uso de la palabra clave de bloqueo C#
- 23. Objective-C - Cuándo utilizar 'auto'
- 24. ¿Se puede usar la palabra clave 'auto' como un especificador de clase de almacenamiento en C++ 11?
- 25. Penalización de rendimiento con la palabra clave 'auto' en Visual Studio 2010
- 26. C# Patrones de uso para la palabra clave "es"
- 27. C# equivalente de la palabra clave Java 'implements'?
- 28. C# utilizando la palabra clave, el uso adecuado de él
- 29. uso de la palabra clave "using" en C#
- 30. ¿Python tiene algo así como la palabra clave de C++?
Eso es increíble, odio escribir iteradores vectoriales;) – identitycrisisuk
¿Por qué romperá el código que contiene 'auto'? ¿El viejo significado todavía no es válido? – Motti
@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. –