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