Casi todas las palabras que podría pensar en agregar como palabra clave a un idioma se han usado casi con certeza como un nombre de variable o alguna otra parte del código de trabajo. Este código se rompería si convirtiera esa palabra en una palabra clave.
Lo increíblemente afortunado autoes que ya era una palabra clave, por lo que las personas no tenían variables con ese nombre, pero nadie lo usaba, porque era el valor predeterminado. Por qué escribir:
auto int i=0;
cuando
int i=0;
significaba exactamente lo mismo?
Supongo que en algún lugar del planeta había una pequeña cantidad de código que usaba 'auto' a la antigua usanza. Pero podría solucionarse quitando el 'auto' y estaría funcionando nuevamente. Por lo tanto, fue una elección bastante obvia reutilizar la palabra clave.
También creo que es un significado más claro. Si ha trabajado con variantes y tal, cuando vea var, puede pensar que la declaración está de alguna manera menos tipeada que si presiona todas las teclas en el teclado para especificar el tipo de la variable. Para mí, autoaclara que le está pidiendo al compilador que deduzca automáticamente el tipo, que es tan fuerte como si lo hubiera especificado usted mismo. Así que realmente fue un golpe de suerte que hizo que un buen nombre estuviera disponible para el comité.
Para aclarar la ruptura (pequeña):
Si tuvieras
auto int i=0;
e intentó compilar con un compilador de C ++ 11, ahora obtendrá un error como
error C3530: 'auto' no se puede combinar con ningún otro especificador de tipo
Esto es trivial, solo elimina el auto o el int y vuelve a compilar.
Sin embargo, hay un problema mayor. Si tuvieras
auto i = 4.3;
C y el C ++ realmente antiguo harían iun int(como lo haría si lo dejara auto, la declaración predeterminada era int). Si ha pasado mucho tiempo sin compilar este código, o ha estado utilizando compiladores antiguos, podría tener parte de este código, al menos en teoría. C ++ 11 lo convertiría en un doubleya que eso es 4.3. (O tal vez float, todavía estoy en modo Boxing Day, pero el punto es, no un int.) Esto podría introducir errores sutiles en toda la aplicación. Y sin advertencias o errores del compilador. Las personas en este bote deben buscar globalmente para autoasegurarse de que no lo estén usando de la manera anterior antes de pasar a un compilador de C ++ 11. Afortunadamente, dicho código es extremadamente raro.
autopodría romper la compatibilidad con versiones anteriores, pero, dependiendo de la frecuencia con la quevarse usa como nombre de variable en comparación con la frecuencia con la queautose usa la palabra clave en el código anterior al 11, el comité podría haber opinado que rompe la compatibilidad de manera menos dramática que la introducción de un nuevo palabra clave lo haría.