当前位置 : 主页 > 手机开发 > 其它 >

具有聚合初始化的C 11构造函数委派

来源:互联网 收集:自由互联 发布时间:2021-06-22
是否可以在我自己的默认ctor定义中调用聚合初始化? GCC使用以下代码抱怨“错误:构造函数委托给自己”: struct X { int x, y, z, p, q, r; X(): x{}, y{}, z{}, p{}, q{}, r{} { } // cumbersome//X(): X{} {
是否可以在我自己的默认ctor定义中调用聚合初始化?

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{};
};
网友评论