引用引用多个对象,怎么可能? 我在阅读的一本C++书籍: int v[] = {0,1,2,3,4,5,6,7,8,9}; for (auto& x : v)

引用引用多个对象,怎么可能? 我在阅读的一本C++书籍: int v[] = {0,1,2,3,4,5,6,7,8,9}; for (auto& x : v),c++,c++11,C++,C++11,当书中的下一行写着: “。无法在初始化后引用其他对象…” x指的是v的所有对象,它是如何工作的 x指的是v的所有对象 不是同时。每次通过循环x时,都有一个新的局部变量,它引用单个数组元素 在伪代码中,它类似于 for (int* it = std::begin(v); it != std::end(v); ++it) { int& x = *it; // new local variable // ... } 有关详细信息,请参阅此处给出的 相当于 { aut

当书中的下一行写着:

“。无法在初始化后引用其他对象…”

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

x指的是v的所有对象

不是同时。每次通过循环
x
时,都有一个新的局部变量,它引用单个数组元素

在伪代码中,它类似于

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

有关详细信息,请参阅此处给出的

相当于

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

这里的
range\u声明
是您的
auto&x
,它被初始化为在每次迭代中引用每个元素,而不是重新绑定相同的引用。

@DanielTrugman与this@PasserBy我一秒钟后就意识到了这一点。我立即重新标记。
{
    auto && __range = range_expression ; 
    auto __begin = begin_expr ;
    auto __end = end_expr ;
    for ( ; __begin != __end; ++__begin) { 
        range_declaration = *__begin; 
        loop_statement 
    } 
}