C++初始化列表的元素少于struct

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)

最后一个元素是在没有初始化器的情况下归零的元素.

son*_*yao 6

这是定义的行为.根据聚合初始化规则,剩余成员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)由空列表,按照通常的列表初始化规则(其执行值初始化用于非类类型和具有默认构造函数的非聚合类,以及聚合的聚合初始化).如果引用类型的成员是其余成员之一,则该程序格式错误.