use*_*020 12 c++ arrays for-loop
例如,我定义了一个多维数组
array<array<array<int, 3>, 4>, 5> a;
Run Code Online (Sandbox Code Playgroud)
我循环它
for (auto& a : a)
for (auto& a : a)
for (auto& a : a)
a = 1;
Run Code Online (Sandbox Code Playgroud)
这是正确的语法吗?我在VS2015中测试过.没有编译错误.
Ben*_*igt 18
这是合法的,并且会按照您的期望进行,但重用变量名称仍然是一个非常糟糕的主意.
C++ 11 ranged-for被定义为源转换,它将范围变量的定义放在内部范围中,并对范围外的范围表达式执行求值.
第6.5.4节说明了这一点
基于范围的声明
Run Code Online (Sandbox Code Playgroud)for ( for-range-declaration : for-range-initializer ) statement相当于
Run Code Online (Sandbox Code Playgroud){ auto &&__range = for-range-initializer ; auto __begin = begin-expr ; auto __end = end-expr ; for ( ; __begin != __end; ++__begin ) { for-range-declaration = *__begin; statement } }
是的 :)
原因是因为a你在for循环中声明隐藏了原始数组a:
for (auto& a : a)
^^^ ^^^^^^^^^
hides this 'a' (the original array)
Run Code Online (Sandbox Code Playgroud)
然后,它又一次又一样.
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |