C++ 中的 Floor() 函数改变变量

问题描述

我正在使用教程点的codingground 编译器上的 floor() 函数测试脚本。 我从这个简单的脚本开始:

#include <iostream>
#include <cmath>

using namespace std; 
/* Including std namespace since I am not including any other namespaces. */

int main() {
   double var1 = 3.393,var2;
   cout << var1 << “ “ << var2;
   return 0;
}

结果:3.393 0。 但是,当我将 floor() 添加到 var1 时,var2 更改为 6.95329e-310。 这是否有原因,要么是编译器特有的,要么是我做错了什么? 资源:http://tpcg.io/SkgxtNCa

解决方法

var2 未初始化,它是一个最终在堆栈上的局部变量。

当您调用函数时,堆栈用于保存返回地址以及该函数的局部变量。当你不初始化一个变量时,它会得到那个地方的堆栈中剩下的最后一个值。有些编译器的行为可能有所不同,有些编译器具有用于初始化的标志。我猜你使用的那个不会这样做,你最终会从堆栈中得到一个随机结果,调用 floor 可能改变了这一点。

只需更改代码以初始化变量

double var1 = 3.393,var2 = 0.0;

下面的评论指出它并不总是在堆栈上,这也是正确的。大多数实现使用堆栈,但根据平台/编译器的不同,它可能有很多东西。最重要的是在非托管语言中初始化变量,如 c、c++、pascal、汇编(这些是我多年来一直使用的那些),因为除非你将它们配置为这样做,否则它们不会为你做。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...