gpt4 book ai didi

C++:跨迭代重用的浮点值

转载 作者:太空宇宙 更新时间:2023-11-04 14:58:24 24 4
gpt4 key购买 nike

让我们看下面这段我无意中写的代码:

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++:跨迭代重用的浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3297602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com