Pamiętam, ktoś kiedyś powiedział mi,Czy auto jest opcjonalnym słowem kluczowym w zakresie zależnym od pętli?
"there is no need for
auto
inside range-based for loops. It would not be ambiguous in the language if we were to remove it."
Czy to prawdziwy stwierdzeniem?
Czy następujący kod działa poprawnie w C++?
for (elem : range){...}
przypuszczałem był już ważny składnia, ale kiedy poszedłem do kompilacji z
clang++ --std=c++1z
, pokazano mi następujący błąd:
range-based for loop requires type for loop variable
for (elem: range){
Kompilator nadal rozpoznaje to jako pasmo oparta na pętli, więc dlaczego nie może również wyprowadzić typu?
Zostało to omówione do wprowadzenia w C++ 17. Aby ta propozycja miała sens, trzeba było argumentować, że składnia pozostaje jednoznaczna, co robi cytat. Nie jestem jednak pewien, jaki jest obecny stan rzeczy. – 5gon12eder
@ 5gon12eder: Myślę, że został przyjęty z dużym niepokojem, szczególnie w kwestii cienia nazwy (np. Czy 'elem' jest już nazwą w zakresie, co jeśli ktoś doda ją później, itp. –
Ta składnia została zaproponowana przez Stephan T. Lavavej dla C++ 17 i byłby to cukier syntaktyczny dla 'for (auto && elem: range)'. Clang IIRC zaimplementował to jako część '-std = C++ 1z', ale kiedy propozycja została odrzucona, prawdopodobnie zmienił to na błąd – Praetorian