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.
Kontynuuj poznawanie C++11: C++11 #3: Zakresowa pętla for.
Piękne, proste i zwięzłe wyjaśnienie słowa kluczowego „auto”. Tego właśnie potrzebowałem.
Dobra robota. Zabieram się właśnie za ten cykl artykułów i pierwszy wpis merytoryczny bardzo na plus. Zwięźle, prosto i z przykładem – tak trzymać!