【发布时间】:2015-04-24 20:58:16
【问题描述】:
如何在 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 {};
^
【问题讨论】:
-
请发布MCVE,以及您遇到的错误。
-
这应该与值初始化具有相同的效果(除非自 C++11 以来发生了一些变化——我还没有完全更新)。你真的得到错误,或者只是过分热心的警告?另外,请告诉我们
Aggregate_t的定义,以便我们检查它是否真的是一个聚合。 -
这可能是一个过分热心的警告,但问题更多的是关于初始化的影响。如果聚合初始化的未初始化成员是值初始化的(根据标准),那么我想这就是我的问题的答案。
-
@KarolyHorvath 除了
{}确实初始化了该成员。 -
我认为这是一个过分热心的警告,通常默认禁用它。
标签: c++ c++14 value-initialization list-initialization aggregate-initialization