为什么我的变量存在于其范围之外

Why does my variable live outside its scope

本文关键字:范围 于其 存在 我的 变量 为什么      更新时间:2023-10-16

我的理解是,在循环完成执行后,在一段时间内或循环内创建的变量从内存中释放/删除(参见参考文献1(。 但是为什么下面的代码显示变量正在使用 PREVIOUS 循环中的值?这是因为字符串流变量具有某种特殊功能吗?

以下是我的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;
}   
}

以下 2 行是实际输出:

intVar=1 charVar=A
intVar=2 charVar=A

为什么不是以下2行?

intVar=1 charVar=A
intVar=2 charVar=

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

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

您还需要知道未初始化的"局部"变量的值是不确定的,并且似乎是随机的。读取未初始化的变量(作为输出的一部分发生(会导致未定义的行为,这就是您在这里遇到的。

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

这是因为循环在打印值之前尚未结束,并且由于在 charvar 中的最后一次迭代期间没有要输入的值,因此它将保留其最后一次的值。 变量的作用域仅在循环中,直到循环的最后一次迭代才会被销毁。 希望我说得有道理