如何使用列表初始化来初始化聚合类型

时间:2015-02-23 13:57:38

标签: c++ c++14 value-initialization list-initialization aggregate-initialization

如何使用list-intialization语法对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 {};
            ^

1 个答案:

答案 0 :(得分:2)

<强> [dcl.init.aggr]

  

7 - 如果列表中的 initializer-clauses 少于聚合中的成员,则未初始化的每个成员都应初始化[ C ++ 14 :来自 brace-or-equal-initializer ,或者,如果没有 brace-or-equal-initializer ,]来自空的初始化列表(8.5.4)

所以g ++对它的警告过于热心;在警告有效的情况下,我不知道如何避免它,除非当然要使用复制初始化和预期的复制省略:

Aggregate_t a = Aggregate_t();