Prawie każde słowo, które możesz pomyśleć o dodaniu słowa kluczowego do języka, prawie na pewno zostało użyte jako nazwa zmiennej lub inna część działającego kodu. Ten kod zostałby zepsuty, jeśli uczynisz to słowo słowem kluczowym.
Niesamowicie szczęśliwą rzeczą auto
jest to, że było to już słowo kluczowe, więc ludzie nie mieli zmiennych o tej nazwie, ale nikt go nie używał, ponieważ był domyślny. Dlaczego warto wpisać:
auto int i=0;
kiedy
int i=0;
znaczyło dokładnie to samo?
Podejrzewam, że gdzieś na tej planecie była niewielka ilość kodu, który używał „auto” po staremu. Ale można to naprawić, usuwając „auto” i będzie działać ponownie. Dlatego zmiana przeznaczenia słowa kluczowego była oczywista.
Zdarza mi się również myśleć, że to jest jaśniejsze znaczenie. Jeśli pracowałeś z wariantami i takimi, możesz zobaczyć var
, że deklaracja jest w jakiś sposób mniej silnie wpisana niż gdybyś sam nacisnął wszystkie klawisze na klawiaturze, aby określić typ zmiennej. Dla mnie auto
to wyjaśnia, że prosisz kompilator, aby automatycznie wydedukował typ, który jest tak silny, jakbyś sam go określił. Tak naprawdę to była bardzo szczęśliwa przerwa, dzięki której komitet zyskał dobre imię.
Aby wyjaśnić (małe) zerwanie:
Gdybyś miał
auto int i=0;
i próbowałeś skompilować z kompilatorem C ++ 11, teraz pojawi się błąd taki jak
błąd C3530: „auto” nie może być łączony z żadnym innym specyfikatorem typu
Jest to trywialne, wystarczy usunąć auto lub int i ponownie skompilować.
Istnieje jednak większy problem. Gdybyś miał
auto i = 4.3;
C i C ++ bardzo stary uczyniłoby (jak to będzie, jeśli zostało przerwane - deklaracja była domyślna ). Jeśli spędziłeś naprawdę dużo czasu bez kompilacji tego kodu lub korzystałeś ze starych kompilatorów, możesz mieć część tego kodu, przynajmniej teoretycznie. C ++ 11 sprawiłoby, że jest to, ponieważ właśnie tym jest 4.3. (A może a , wciąż jestem w trybie Boxing Day, ale chodzi o to, że nie .) To może wprowadzić subtelne błędy w twojej aplikacji. I bez żadnych ostrzeżeń i błędów z kompilatora. Ludzie w tej łodzi powinni szukać globalnie, aby upewnić się, że nie używali jej w stary sposób, zanim przejdą do kompilatora C ++ 11. Na szczęście taki kod jest niezwykle rzadki.i
int
auto
int
double
float
int
auto
auto
może zepsuć wsteczną kompatybilność, ale w zależności od tego, jak częstovar
jest używana jako nazwa zmiennej w porównaniu do tego, jak częstoauto
słowo kluczowe jest używane w kodzie wcześniejszym niż 11, komitet mógł uznać, że łamie on zgodność mniej dramatycznie niż wprowadzając nowy słowo kluczowe by.