参考多个对象,怎么可能?

sch*_*hul 12 c++ c++11

在我正在阅读的一本C++书籍中:

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

当书中的下一行说:

"......在初始化之后,不能引用引用不同的对象......"

x指的是所有v的对象,它是如何工作的?

Pas*_* By 19

给定基于范围的for循环

for ( range_declaration : range_expression ) loop_statement
Run Code Online (Sandbox Code Playgroud)

它相当于

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

range_declaration是你的auto& x,它被初始化为在每次迭代时引用每个元素,而不是重新绑定相同的引用.


seh*_*ehe 14

x指的是所有v的对象

不是在同一时间.每次循环x都是一个引用单个数组元素的新局部变量.

在伪代码¹中,它就像

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

¹有关具体信息,请参阅http://en.cppreference.com/w/cpp/language/range-for