Quasi ogni parola che potresti pensare di aggiungere come parola chiave a una lingua è stata quasi sicuramente utilizzata come nome di variabile o in qualche altra parte del codice di lavoro. Questo codice verrebbe infranto se la parola fosse trasformata in parola chiave.
La cosa incredibilmente fortunata auto
è che era già una parola chiave, quindi le persone non avevano variabili con quel nome, ma nessuno lo usava, perché era l'impostazione predefinita. Perché digitare:
auto int i=0;
quando
int i=0;
significava esattamente la stessa cosa?
Suppongo che da qualche parte sul pianeta ci fosse una piccola quantità di codice che utilizzava "auto" alla vecchia maniera. Ma potrebbe essere risolto rimuovendo "auto" e funzionerebbe di nuovo. Quindi è stata una scelta abbastanza ovvia riutilizzare la parola chiave.
Mi capita anche di pensare che sia un significato più chiaro. Se hai lavorato con varianti e simili, quando vedi var
puoi pensare che la dichiarazione sia in qualche modo meno tipizzata rispetto a se hai premuto tu stesso tutti i tasti sulla tastiera per specificare il tipo di variabile. Per me, auto
chiarisco che stai chiedendo al compilatore di dedurre automaticamente il tipo, che è altrettanto forte come se lo avessi specificato tu stesso. Quindi è stata davvero una pausa molto fortunata che ha reso disponibile un buon nome al comitato.
Per chiarire la (piccola) rottura:
Se tu avessi
auto int i=0;
e ho provato a compilare con un compilatore C ++ 11, ora otterrai un errore come
errore C3530: 'auto' non può essere combinato con nessun altro specificatore di tipo
Questo è banale, basta rimuovere l'auto o l'int e ricompilare.
C'è un problema più grande però. Se tu avessi
auto i = 4.3;
C e il C ++ veramente vecchio farebbero i
un int
(come farebbe se si fosse interrotto auto
- la dichiarazione di default era int
). Se hai trascorso molto tempo senza compilare questo codice, o hai utilizzato vecchi compilatori, potresti avere un po 'di questo codice, almeno in teoria. C ++ 11 lo renderebbe un double
dato che è quello che è 4.3. (O forse un float
, sono ancora in modalità Giorno di Santo Stefano, ma il punto è, non un int
.) Questo potrebbe introdurre bug sottili in tutta la tua app. E senza avvertimenti o errori dal compilatore. Le persone in questa barca dovrebbero cercare globalmente per auto
assicurarsi che non lo stessero usando alla vecchia maniera prima di passare a un compilatore C ++ 11. Fortunatamente, tale codice è estremamente raro.
auto
potrebbe rompere la compatibilità all'indietro, ma, a seconda della frequenza con cuivar
viene utilizzato come nome variabile rispetto alla frequenza con cui laauto
parola chiave viene utilizzata nel codice pre-11, il comitato potrebbe aver ritenuto che interrompesse la compatibilità in modo meno drammatico rispetto all'introduzione di un nuovo parola chiave sarebbe.