例如,我定义了一个多维数组
array<array<array<int, 3>, 4>, 5> a;
我循环了
for (auto& a : a)
for (auto& a : a)
for (auto& a : a)
a = 1;
语法是否正确?我在VS2015中测试过。没有编译错误。
答案 0 :(得分:18)
它是合法的,并且会按照您的意愿行事,但重用变量名称仍然是一个非常糟糕的主意。
C ++ 11 ranged-for被定义为源变换,它将范围变量的定义放在内部范围内,并执行范围外表达式的评估。
第6.5.4节说
基于范围的陈述
for ( for-range-declaration : for-range-initializer ) statement
相当于
{ auto &&__range = for-range-initializer ; auto __begin = begin-expr ; auto __end = end-expr ; for ( ; __begin != __end; ++__begin ) { for-range-declaration = *__begin; statement } }
答案 1 :(得分:6)
是的,它是:)
原因是因为你在for循环中声明的a
隐藏了原始数组a
:
for (auto& a : a)
^^^ ^^^^^^^^^
hides this 'a' (the original array)
然后,它又一遍又一样。