是否可以在我自己的默认ctor定义中调用聚合初始化? GCC使用以下代码抱怨“错误:构造函数委托给自己”: struct X { int x, y, z, p, q, r; X(): x{}, y{}, z{}, p{}, q{}, r{} { } // cumbersome//X(): X{} {
GCC使用以下代码抱怨“错误:构造函数委托给自己”:
struct X { int x, y, z, p, q, r; X(): x{}, y{}, z{}, p{}, q{}, r{} { } // cumbersome //X(): X{} { } // the idea is nice but doesn't compile };
我现在在ctor体中使用memset(this,0,sizeof(* this)).
一种方法是以下列方式欺骗重载决策:struct X { int x, y, z, p, q, r; X(int) : x{}, y{}, z{}, p{}, q{}, r{} { } X() : X(0) { } };
另一种方法是使用类内默认成员初始化:
struct X { int x = 0, y = 0, z = 0, p = 0, q = 0, r = 0; };
在您的具体示例中,您还可以:
struct X { std::array<int, 6> vars{}; };