【发布时间】:2016-06-15 03:27:00
【问题描述】:
#include <iostream>
using namespace std;
int main() {
int var; // default initialization var = 0 Why?
cout << var << endl;
return 0;
}
如果我理解默认初始化正确,int 变量必须是不确定的值。
默认初始化的效果是: 1) 如果 T 是非 POD(C++11 前)类类型,则考虑构造函数并对其进行针对空参数列表的重载决议。调用选择的构造函数(默认构造函数之一)为新对象提供初始值; 2) 如果 T 是数组类型,则数组的每个元素都是默认初始化的; 3) 否则,什么都不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定的值。
那么,为什么 int var 在这种情况下等于 0?
【问题讨论】:
-
是的,它是不确定的值。尝试输出不确定的值会导致未定义的行为。未定义的行为意味着任何事情都可能发生。打印 0 是“任何东西”的一种可能情况。
标签: c++ initialization