c ++ 0x为什么基于范围的for-loop中的"auto"变量作为值传递给循环体,而不是引用?

NoS*_*tAl 3 foreach c++11

我有一个这样的错误,它让我想知道为什么它是这样设计的.我觉得自动的东西会更好:容器会产生引用,而不是值.例如:

int t[3]{11,22,33};
for(int& el:t2)
    el*=2;
Run Code Online (Sandbox Code Playgroud)

得到22,44,66

int t[3]{11,22,33};
    for(auto el:t2)
        el*=2;
Run Code Online (Sandbox Code Playgroud)

"什么也没做".

X-I*_*nce 11

auto在你描述的情况下推断出类型是int.如果您想将其转换为参考,您可以使用auto&.

如果C++编译器只使用特殊规则,因为它处于for循环中,则规则会非常混乱.

auto i = t[1];
Run Code Online (Sandbox Code Playgroud)

是相同的

int i = t[1];
Run Code Online (Sandbox Code Playgroud)

这里的情况相同,如果你想要一个引用,你必须指定你想要一个引用.