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

时间:2016-08-09 01:01:54

标签: c++ struct initialization

当我使用初始化列表创建结构,但初始化列表包含的元素少于我的结构时,我看到剩余的元素用零初始化。

这是一个未定义的行为,我看到了零,因为我的编译器(VS2015)决定为我清零内存?

或者有人能指出我用C ++解释这种行为的文档吗?

这是我的代码:

struct Thing {
    int value;
    int* ptr;
};


void main() {
    Thing thing { 5 };
    std::cout << thing.value << " " << thing.ptr << std::endl;
}

这就是它打印的内容:

5 00000000

最后一个元素是没有初始化器的零。

1 个答案:

答案 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),具体如下:通常的列表初始化规则(对非类型类型执行值初始化,使用默认构造函数执行非聚合类,以及聚合的聚合初始化)。如果引用类型的成员是其余成员之一,则该程序格式不正确。