Zaczniemy od prostszych zmian. Weźmy pod uwagę słowo kluczowe auto.

Umożliwia ono w C++11 tzw. automatyczną dedukcję typu. Oznacza to, że w ściśle określonych sytuacjach, możemy zastąpić konkretny typ słowem kluczowym auto, a kompilator automatycznie określi prawidłowy typ zmiennej.

Skąd będzie wiedział o jaki typ chodzi ? Słowa kluczowego auto można użyć jedynie w sytuacji, w której równocześnie z deklaracją następuje inicjalizacja zmiennej wartością. Kompilator sam jednoznacznie określi, jakiego typu zmienna może być zainicjalizowana tą wartością.

Kilka prostych przykładów:

auto counter = 4;    // typ zmiennej counter to int 
auto myObject = new SomeClass;    // typ zmiennej myObject to SomeClass*

W pierwszej linii literał liczby całkowitej (4) jest traktowany jako int, natomiast w drugiej linii tworzymy nowy obiekt klasy SomeClass operatorem new – operacja zwraca wskaźnik na obiekt klasy SomeClass, więc taki jest typ inicjalizowanej zmiennej myObject.

Zastosowania.

Kiedy automatyczna dedukcja typów przyda nam się najbardziej ?

Po pierwsze – kiedy typ zmiennej nie jest oczywisty (tzn. trudno z wyrażenia inicjalizującego wywnioskować typ zmiennej).

Po drugie – gdy typ jest na tyle skomplikowany, że sam jego zapis jest dość długi i uciążliwy.

Od razu na myśl przychodzi deklaracja iteratora dla np. kontenera z biblioteki standardowej. Dla starszych wersji języka mamy więc:

std::vector<int> sampleVector;  

// kilka linijek poniżej - wyświetlanie zawartości wektora  
for(std::vector<int>::const_iterator it = sampleVector.cbegin(); it != sampleVector.cend(); ++it) 
{     
    std::cout << *it << std::endl; 
}

Wykorzystując słowo kluczowe auto, kod wygląda następująco:

std::vector<int> sampleVector;  

// kilka linijek poniżej - wyświetlanie zawartości wektora  
for(auto it = sampleVector.cbegin(); it != sampleVector.cend(); ++it) 
{     
    std::cout << *it << std::endl; 
}

Myślę, że doskonale widać na tym przykładzie różnicę.

Widać również coś innego. Nowe słowo kluczowe stanowi swojego rodzaju uproszczenie zapisu. Jako takie nie ma wpływu na specyfikację biblioteki standardowej języka C++. Jest to więc po prostu ułatwienie (częto bardzo przydatne) dla programistów.