根据我对C++规范的理解(根据网上的标准草案),for循环可以重写为while循环和初始化块。根据我的理解,for-loop的迭代语句和body发生在同一个作用域,所以应该可以使用for-loop的body中声明的变量。gcc 和 clang 都拒绝以下(人为的)代码,这是我真实代码的简化。
我显然可以通过在循环之外声明 j 来修复代码,但是为什么 j 超出了下面的范围?
int main()
{
for(int i=0; i<10; i=j) int j=i+1;
// // I must misunderstand the standard because I thought the above loop is
// // equivalent to the commented code below where j is clearly in scope.
// {
// int i=0;
// while(i<10) {
// int j=i+1;
// i=j;
// }
// }
return 0;
}
根据clang(和gcc),这是无效的。
test.cpp:3:26: error: use of undeclared identifier 'j'
for(int i=0; i<10; i=j) int j=i+1;
^
1 error generated.