1

リスト初期化構文を使用してC++ 14で集約型を値初期化するにはどうすればよいですか?

Aggregate_t {}; 

これは集合体の初期化と見なされ、 の初期化されていないメンバーに対してエラーまたは警告が生成されますAggregate_t

これはまったく可能ですか?

編集:例

struct Aggregate_t {
  int x;
};

int main (int, char**)
{
  Aggregate_t {};
  return 0;
}

g++-4.9.2 でコンパイル:

main.c++: In function ‘int main(int, char**)’:
main.c++:7:16: warning: missing initializer for member ‘Aggregate_t::x’ [-Wmissing-field-initializers]
   Aggregate_t {};
            ^
4

1 に答える 1

2

[dcl.init.aggr] :

7 - リスト内の初期化句が集約内のメンバーよりも少ない場合、明示的に初期化されていない各メンバーは初期化されます [ C++14 :ブレースまたはイコール初期化子から、または存在しない場合は空のイニシャライザ リスト ( 8.5.4 ) から。

そのため、g++ は警告に対して熱心すぎます。もちろん、予想されるコピー省略でコピー初期化を使用することを除いて、警告が有効な場合にそれを保持しながらそれを回避する方法はわかりません:

Aggregate_t a = Aggregate_t();
于 2015-02-23T14:18:49.050 に答える