Ссылка на несколько объектов, как это возможно?

В одной из книг на С++ я читаю:

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

Когда следующая строка в книге говорит:

".. ссылку не может ссылаться на другой объект после его инициализации..."

x относится ко всем v-объектам, как это работает?

Ответ 1

Предоставлен диапазон для цикла

for ( range_declaration : range_expression ) loop_statement

Это эквивалентно

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

Здесь range_declaration является вашим auto& x, он инициализируется для обозначения каждого элемента на каждой итерации, а не для повторной привязки к той же ссылке.

Ответ 2

x относится ко всем v объектам

Не в то же время. Каждый раз через цикл x - это новая локальная переменная, которая ссылается на один элемент массива.

В псевдокоде №1 он похож на

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

¹ Для деталей см. здесь http://en.cppreference.com/w/cpp/language/range-for