我有一个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或"0";你好世界";就此事而言。事实上,该程序不仅可以打印任何值,而且就语言而言,所有都可能发生。在实践中,您通常会得到一些数值(这是一个恰好位于读取的内存位置的值(。如果你幸运的话,这个程序会出错,并在UB引发严重问题之前提醒你。