【问题标题】:What is the default value of unsigned variable? [duplicate]无符号变量的默认值是多少? [复制]
【发布时间】:2020-11-21 15:43:22
【问题描述】:

我有一个 C++ 程序。我做了这样的事情:

#include <iostream>
int main() {
unsigned x,cifra,cifraOld;
std::cout<<cifra;
}

由于某种原因,输出为8。有人能告诉我8 是否是无符号变量的默认值吗?如果不是,为什么会发生在我身上?

将行更改为unsigned x,cifra=0,cifraOld; 将输出0

【问题讨论】:

  • 没有默认值。访问未初始化的变量是未定义的行为

标签: c++ std iostream unsigned


【解决方案1】:

此声明:

unsigned cifra;

cifra初始化为一个不确定值。

从不确定的值读取,例如像这样:

std::cout<<cifra;

调用未定义的行为 (UB)。

对于带有 UB 的程序,打印 8 是完全可能的。它可以打印 0、42 或“hello world”。事实上,该程序不仅可以打印任何值,而且就语言而言,任何事情都可能发生。在实践中,您通常会得到一些数值(这是一个恰好位于读取的内存位置的值)。如果幸运的话,该程序会出现段错误,并在它导致严重问题之前提醒您注意 UB。

【讨论】:

  • 但是为什么我做std::cout&lt;&lt;cifra;时输出8
  • @ezluci 未定义的行为表示你可以获得任何值
  • 在实践中,您通常似乎会得到恰好在堆栈上的任何垃圾值。
  • 好的,我现在明白了。谢谢大家。
猜你喜欢
  • 2011-06-25
  • 2017-02-17
  • 1970-01-01
  • 2011-05-08
  • 2020-07-30
  • 1970-01-01
  • 2013-01-07
  • 2013-05-07
相关资源
最近更新 更多