Ricordo qualcuno una volta mi diceva,È auto una parola chiave facoltativa in loop basati su cicli?
"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."
Che è una vera dichiarazione?
La seguente sintassi C++ è valida per il codice?
for (elem : range){...}
Avevo pensato che questo era già sintassi valida, ma quando sono andato a compilare con
clang++ --std=c++1z
, mi è stato mostrato il seguente errore:
range-based for loop requires type for loop variable
for (elem: range){
Il compilatore riconosce ancora questo come un range basato su loop, quindi perché non può anche derivare il tipo?
Questo è stato discusso per l'introduzione in C++ 17. Affinché questa proposta abbia un senso, è necessario sostenere che la sintassi rimane inequivocabile, che è ciò che fa la citazione. Non sono sicuro di come sia lo stato attuale delle cose. – 5gon12eder
@ 5gon12eder: Penso che sia stato accolto con molta preoccupazione, soprattutto per quanto riguarda il nome shadowing (ad esempio se 'elem' è già un nome in ambito, cosa succede se qualcuno lo aggiunge in seguito, ecc. –
Questa sintassi è stata proposta da Stephan T Lavavej per C++ 17, e sarebbe zucchero sintattico per 'for (auto && elem: range)'. Il clang IIRC lo ha implementato come parte di '-std = C++ 1z', ma quando la proposta è stata rifiutata, probabilmente – Praetorian