当我使用初始化列表创建结构,但初始化列表包含的元素少于我的结构时,我看到剩余的元素用零初始化。
这是一个未定义的行为,我看到了零,因为我的编译器(VS2015)决定为我清零内存?
或者有人能指出我用C ++解释这种行为的文档吗?
这是我的代码:
struct Thing {
int value;
int* ptr;
};
void main() {
Thing thing { 5 };
std::cout << thing.value << " " << thing.ptr << std::endl;
}
这就是它打印的内容:
5 00000000
最后一个元素是没有初始化器的零。
答案 0 :(得分:6)
这是定义的行为。根据{{3}}的规则,其余成员ptr
将为aggregate initialization,即value-initialized为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)
,具体如下:通常的列表初始化规则(对非类型类型执行值初始化,使用默认构造函数执行非聚合类,以及聚合的聚合初始化)。如果引用类型的成员是其余成员之一,则该程序格式不正确。