首页 > 解决方案 > 无符号变量的默认值是多少?

问题描述

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

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

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

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

标签: c++stdiostreamunsigned

解决方案


本声明:

unsigned cifra;

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

从不确定的值中读取,例如:

std::cout<<cifra;

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

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


推荐阅读