为什么打印32767
(或其他随机数)?什么是std::cout
印刷品?为什么不NULL
(或0
)?
int main()
{
int a;
std::cout << a;
}
Run Code Online (Sandbox Code Playgroud)
vso*_*tco 14
这是因为具有自动存储持续时间的变量在C++中不会自动初始化为零.在C++中,您不需要为不需要的东西付费,并且自动初始化变量需要花费时间(将内存位置设置为零最终会减少到机器内容,然后将其转换为控制物理位的电信号).
变量被保留为内存位置,并且发生了一些垃圾在该内存位置.那个垃圾正在打印出来cout
.
正如@dwcanillas指出的那样,它是未定义的行为.相关:C中声明的未初始化变量会发生什么?它有价值吗?
从C++标准(强调我的):
8.5初始值设定项[dcl.init]
7)默认初始化T类型的对象意味着:
- 如果T是(可能是cv限定的)类类型(第9节),则考虑构造函数.枚举适用的构造函数(13.3.1.3),并通过重载解析(13.3)选择初始化函数()的最佳构造函数.使用空参数列表调用如此选择的构造函数来初始化>>对象.
- 如果T是数组类型,则每个元素都是默认初始化的.
- 否则,不执行初始化.
12)如果没有为对象指定初始化程序,则默认初始化该对象.当获得具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,并且如果没有对该对象执行初始化,则该对象保留不确定的值,直到该值被替换(5.18).[注意:具有静态或线程存储持续时间的对象是零初始化的,请参见3.6.2.- 结束注释] 如果评估产生不确定的值,则行为是不确定的,除非在以下情况中:
- 如果通过以下评估产生无符号窄字符类型(3.9.1)的不确定值:
- 条件表达式的第二个或第三个操作数(5.16),
- 逗号表达式的右操作数(5.19),
- 转换的操作数或转换为无符号窄字符类型(4.7,5.2.3,5.2.9,5.4),或
- 废弃值表达式(第5条)
...
归档时间: |
|
查看次数: |
878 次 |
最近记录: |