下面的 while 循环不会终止。这是因为变量 x
在 while 循环中重新声明。但我不明白为什么在第二次迭代之后,语句 x<10
和 y=x
考虑在外部范围内定义的 x 而不是 x
在以下语句的 block 范围内定义。
这是因为一旦第一次迭代结束,x
在 block 作用域中定义的被破坏并且循环开始执行新鲜?
#include<iostream>
int main () {
int x = 0, y;
while(x <10 ){
y = x;
std::cout<<"y is :"<< y <<std::endl;
int x = y + 1;
std::cout<<"x is :"<< x <<std::endl;
}
std::cout<<"While loop is over"<<std::endl;
}
最佳答案
while 循环的每次迭代都会计算外部作用域 x
并且 y
被赋予外部作用域 x
的值。之后,另一个 x
被定义在第二个 std::cout
使用的内部范围内,但程序没有使用内部 x
在下面的代码中,我将内部的 x
替换为 z
,但其他方面的行为是相同的。唯一的区别是在更内部的范围内没有第二个 x
来隐藏外部范围:
#include<iostream>
int main () {
int x = 0, y;
while(x <10 ){
y = x;
std::cout<<"y is :"<< y <<std::endl;
int z = y + 1;
std::cout<<"z is :"<< z <<std::endl;
}
std::cout<<"While loop is over"<<std::endl;
}
下面我有一个旨在消除混淆的示例。在内部范围 x
没有被“重新声明”,一个新的 x
被声明并且它在 之后超出范围:
#include<iostream>
int main () {
int x = 1;
{
int x = 2;
std::cout << x << '\n'; // 2
}
std::cout << x << '\n'; // 1
}
关于C++混淆for循环中重新声明变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37936257/