C++混淆for循环中重新声明变量的范围

标签 c++ while-loop scope redeclaration

下面的 while 循环不会终止。这是因为变量 x在 while 循环中重新声明。但我不明白为什么在第二次迭代之后,语句 x<10y=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/

相关文章:

python - 这个 while 循环是如何工作的?

bash:在 while 循环中剪切时保留白色字符

c++ - 在范围内定义的变量与注入(inject)该作用域的命名空间变量

scope - Google 驱动器 API 范围 : https://www. googleapis.com/auth/drive

c++ - 在 Visual Studio 中调试 mex 函数

c++构造函数将引用传递给基类对象

c++ - 获取具有相同扩展名的文件列表并处理它们

javascript - 创建重复值的JS数组

javascript - $http AngularJS 之后数据范围不更新

c++ - DirectX10 上的深度缓冲区不起作用