2017-10-03 11 views
12

W jednym z C++ książek czytam:Odniesienie odnoszące się do wielu obiektów, jak to jest możliwe?

int v[] = {0,1,2,3,4,5,6,7,8,9}; 
for (auto& x : v) 

Kiedy następny wiersz w książce mówi:

”.. odniesienia nie może być wykonana w odniesieniu do innego obiektu po jego inicjalizacji. .. "

x odnosi się do wszystkich obiektów v, jak to działa?

+0

@DanielTrugman To nie ma nic wspólnego z tym –

+0

@PasserBy Zdałem sobie z tego sprawę sekundę po tagowaniu. Natychmiast zareagowałem. –

Odpowiedz

14

x odnosi się do wszystkich V za przedmiot

nie w tym samym czasie. Za każdym razem w pętli x jest nowa lokalna zmienna, która odnosi się do pojedynczego elementu tablicy.

W pseudo code¹, to jak

for (int* it = std::begin(v); it != std::end(v); ++it) 
{ 
    int& x = *it; // new local variable 
    // ... 
} 

¹ Do specyfiki, patrz tutaj http://en.cppreference.com/w/cpp/language/range-for

19

Biorąc pod uwagę range-based for loop

for (range_declaration : range_expression) loop_statement 

Jest to odpowiednik

{ 
    auto && __range = range_expression ; 
    auto __begin = begin_expr ; 
    auto __end = end_expr ; 
    for (; __begin != __end; ++__begin) { 
     range_declaration = *__begin; 
     loop_statement 
    } 
} 

Tutaj range_declaration to Twój auto& x, jest zainicjowany, aby odnosić się do każdego elementu w każdej iteracji, nie ponownie wiążąc tego samego odniesienia.

Powiązane problemy