假设我有一个这样的类:
struct X { char buf[10]; }; X x{"abc"};
这编译.但是,如果我将用户定义的构造函数添加到类中,则将删除此隐式声明的聚合初始化构造函数:
struct X { char buf[10]; X(int, int) {} }; X x{"abc"}; // compile error
我如何声明我想要默认聚合初始化构造函数,就像默认构造函数一样X()=default
?谢谢.
没有"默认聚合初始化构造函数".
聚合初始化仅发生在聚合上.聚合是除了其他之外没有(用户提供的)构造函数的类型.你所要求的在逻辑上是不可能的.
做你想做的事的正确方法是建立一个工厂功能,以你特殊的方式构建你的类型.这样,类型可以保持聚合,但是有一种以你想要的方式初始化它的简便方法.
如果要强制用户调用构造函数来构造它,则为类型提供构造函数.如果不这样做,您只需使用工厂功能.