This question already has answers here:
Default variable value

(9个答案)


在4个月前关闭。




我有一个C++程序。我做了这样的事情:
#include <iostream>
int main() {
unsigned x,cifra,cifraOld;
std::cout<<cifra;
}
由于某种原因,输出为8。有人可以告诉我8是无符号变量的默认值吗?如果没有,为什么这会发生在我身上?
将行更改为unsigned x,cifra=0,cifraOld;将输出0

最佳答案

此声明:

unsigned cifra;
cifra初始化为不确定的值。
从不确定的值读取,例如像这样:
std::cout<<cifra;
调用未定义的行为(UB)。
对于UB程序,完全可以打印8。它可以打印0或42,也可以打印“hello world”。实际上,该程序不仅可以打印任何值,而且就语言而言,任何事情都可能发生。在实践中,通常会得到一些数字值(该值恰好位于读取的内存位置)。如果您很幸运,该程序将进行段错误处理,并在导致严重问题之前通知您UB。

09-26 22:27