让我们看一下我无意间写的以下代码:

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/

10-13 02:59