我没有找到这种情况发生的原因,也没有找到避免它的方法。
在C ++中,我试图声明一个只在每个while循环中起作用的临时变量,并且在结束后应该被销毁。
我有这样的事情:
#include <iostream>
int main() {
while (foo) {
float SampleVariable;
...
std::cout << SampleVariable << std::endl;
...
SampleVariable = 20;
}
return 0;
}
在第一个循环中,SampleVariable
输出值为5.8825e-39
;但在第二个循环和以下循环中,SampleVariable
的输出值为20
。
答案 0 :(得分:2)
你必须明白,在计算中,当某些东西被破坏时,它不会被设置为0或某个魔法值。它只是设置为在下一个进程到来时被覆盖。
在你的循环中,你没有初始化SampleVariable
,它只是采用了之前的价值。在第一次迭代中,它是之前的任何东西。在接下来的几次迭代中,它是SampleVariable
在过去的迭代中的原因,因为偶然(不是真的),你的浮点数被分配到内存中的相同位置。
初始化您的变量,如
float SampleVariable = 0.f;
并且您的std::cout
每次都会打印0。
答案 1 :(得分:1)
在第一个循环中,
SampleVariable
输出值为5.8825e-39
,因为它应该是
实际上任何输出都是“它应该是什么”,因为您通过访问具有不确定值的对象来调用UB。没有办法“清除”变量。在每个循环中,其状态被重置为“不确定”,这意味着任何值都适用。你应该放弃尝试“重置”它。