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 回答