为什么我的变量不在其范围之内

0 c++ scope

我的理解是在循环完成执行后,在内存中创建的变量或者从内存中释放/循环的变量(参见参考文献1).但是为什么下面的代码显示变量正在使用PREVIOUS循环中的值?那是因为stringstream变量有一些特殊的力量吗?

以下是我的C++代码片段:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main(){
    string str="1A2";
    stringstream ss(str);
    int intVar;
    while(ss.good()){
        char charVar;
        ss >> intVar;
        ss>> charVar;
        cout<<"intVar="<<intVar << " charVar="<<charVar<<endl;
    }   
}
Run Code Online (Sandbox Code Playgroud)

以下2行是实际输出:

intVar=1 charVar=A
intVar=2 charVar=A
Run Code Online (Sandbox Code Playgroud)

为什么它不是以下2行?

intVar=1 charVar=A
intVar=2 charVar=
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 7

首先,范围生命周期之间存在差异.

变量的生命周期charVar结束每次迭代,但变量仍在循环内的范围内.

此外,您需要知道未初始化的"本地"变量的值是不确定的并且看似随机.读取未初始化的变量(作为输出的一部分发生)会导致未定义的行为,这就是您在此处遇到的行为.

实际上发生的事情是用于变量的内存charVar不会改变,编译器在每次迭代时重用相同的位置.由于您不修改该内存,因此它将只保留存储在该内存中的最后一个值.