Mon*_*Kin 3 c++ struct initialization
当我使用初始化列表创建结构,但初始化列表包含的元素少于我的结构时,我看到剩余的元素用零初始化.
这是一个未定义的行为,我看到零,因为我的编译器(VS2015)决定为我归零内存?
或者有人能指出我在C++中解释这种行为的文档?
这是我的代码:
struct Thing {
int value;
int* ptr;
};
void main() {
Thing thing { 5 };
std::cout << thing.value << " " << thing.ptr << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这就是它打印的内容:
5 00000000
Run Code Online (Sandbox Code Playgroud)
最后一个元素是在没有初始化器的情况下归零的元素.
这是定义的行为.根据聚合初始化规则,剩余成员ptr将被初始化值,即零初始化为NULL指针.
(强调我的)
如果初始化条款的数目小于成员的数量
and bases (since C++17)或初始化列表完全是空的,其余成员and bases (since C++17)都被初始化by their default initializers, if provided in the class definition, and otherwise (since C++14)由空列表,按照通常的列表初始化规则(其执行值初始化用于非类类型和具有默认构造函数的非聚合类,以及聚合的聚合初始化).如果引用类型的成员是其余成员之一,则该程序格式错误.