【问题标题】:Which "value" has an un-init value?哪个“值”具有非初始化值?
【发布时间】:2016-10-26 09:19:34
【问题描述】:

我有这个code

double val1;
double val2 = 0.0;

if(val1 != val2) {
    cout << "different: " << val1 << " | " << val2 << endl;
}

输入if-statement。我认为val1 默认情况下不会得到 0.0(即 NULL)。它得到什么价值?我一直以为 0.0 是默认的...

【问题讨论】:

  • 该位置的堆栈上发生了什么。自动变量没有默认初始化。
  • 好吧,你总是想错了。
  • 0.0 不等于NULL
  • 在其他一些语言中默认为 0.0,但在 C++ 中不是。
  • 使用调试标志编译也可能使其为 0,但在发布时不会。通常在 C++ 中。始终初始化您的变量(至少是原始数据类型)。

标签: c++ variables init


【解决方案1】:

未初始化的局部非静态变量会有一个indeterminate值,而且看起来是随机的。

您不应使用未初始化的局部变量,因为这会导致未定义的行为

【讨论】:

  • 本地非静态 primitives 将具有不确定的值。结构体或类将被默认构造,初始化和未初始化取决于类或结构体默认构造函数定义。
  • 但是为什么如果我打印它(cout)它会打印 0? cout 不确定值的默认行为?
  • @paizza,不确定表示非零。这意味着它可以有任何值,包括零(但不保证)。
  • @paizza 在某些情况下也可以为 0(例如在调试模式下编译时),但这不能保证。不同的编译器甚至不同的编译模式与您的编译器都可以改变这一点。所以你不应该依赖它是 0 而不明确地将它设置为 0。
猜你喜欢
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多