C++使用默认值进行统一初始化

C++ uniform initialization with default values

本文关键字:初始化 默认值 C++      更新时间:2023-10-16

考虑以下结构:

struct A
{
    int i;
};
struct B
{
    int i = 0;
};

为什么我可以使用统一初始值设定项初始化 A 类型的对象,而不能初始化 B 类型的对象?

A a{1};
B b{1}; //ill formed

当使用默认值初始化成员时,编译器在做什么?

在 C++11 中,B 不是聚合,因为它对非静态数据成员具有相等的初始值设定项。这意味着,除非提供合适的构造函数,否则不能使用大括号括起来的初始值设定项。

这一限制已在C++14中放宽。在该标准中,B是一个聚合,初始化是有效的。