让我们看一下我无意间写的以下代码:
void test (){
for (int i = 1; i <=5; ++i){
float newNum;
newNum +=i;
cout << newNum << " ";
}
}
现在,这就是我脑海中发生的事情:
我一直在想,因为该行放在循环中,所以float newNum会为每个迭代创建一个具有新值的新变量newNum。而且由于float newNum不会引发编译错误,因此C ++必须分配一些默认值(休姆,必须为0)。然后,我期望输出为“ 1 2 3 4 5”。打印的是“ 1 3 6 10 15”。
请帮助我知道我对float newNum会为每次迭代创建一个新变量的期望出了什么问题?
顺便说一句,在Java中,由于未初始化newNum,因此这段代码无法编译,这对我来说可能更好,因为我知道我需要将其设置为0以获得预期的输出。
最佳答案
由于newNum
没有显式初始化,因此至少在第一次迭代时,它将具有一个随机值(由分配给它的内存块中包含的垃圾数据确定)。
在后续迭代中,它可能会重用其较早的值(因为编译器可能会重复将其分配到同一内存位置-这完全取决于编译器的判断)。从输出来看,这实际上是这里发生的情况:在第一次迭代中,newNum
的值为0(纯偶然),然后分别为1、3、6和10。
因此,要获得所需的输出,请在循环内显式初始化变量:
float newNum = 0.0;
关于c++ - C++:在迭代中重用浮点值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3297602/