如何保持隐式声明的聚合初始化构造函数?

Kan*_* Li 1 c++ c++11 c++14

假设我有一个这样的类:

struct X {
  char buf[10];
};
X x{"abc"};
Run Code Online (Sandbox Code Playgroud)

这编译.但是,如果我将用户定义的构造函数添加到类中,则将删除此隐式声明的聚合初始化构造函数:

struct X {
  char buf[10];
  X(int, int) {}
};
X x{"abc"}; // compile error
Run Code Online (Sandbox Code Playgroud)

我如何声明我想要默认聚合初始化构造函数,就像默认构造函数一样X()=default?谢谢.

Nic*_*las 6

没有"默认聚合初始化构造函数".

聚合初始化仅发生在聚合上.聚合是除了其他之外没有(用户提供的)构造函数的类型.你所要求的在逻辑上是不可能的.

做你想做的事的正确方法是建立一个工厂功能,以你特殊的方式构建你的类型.这样,类型可以保持聚合,但是有一种以你想要的方式初始化它的简便方法.

如果要强制用户调用构造函数来构造它,则为类型提供构造函数.如果不这样做,您只需使用工厂功能.