【发布时间】:2015-09-25 03:24:40
【问题描述】:
这行得通:
int arr[10] = {};
arr 的所有元素的值初始化为零。
为什么这不起作用:
std::array<int, 10> arr({});
我从 g++(4.8.2 版)收到以下警告:
警告:缺少成员“std::array
::_M_elems”的初始化程序
【问题讨论】:
-
“这不起作用...我收到以下警告” 所以它起作用了。如果它不起作用,它就不会编译!
-
@JonathanWakely 我相信 OP 试图通过警告来表达惊讶,我也发现它令人惊讶。这确实是有问题的,因为您使用的是
-Werror,我这样做了。很高兴看到警告已在最新版本中删除,但这对那些无法升级的人没有帮助:-( -
@ShafikYaghmour,但是 OP 没有使用 -Werror(或者它不会说“警告”)并且在不明智地使用 -Wno-xxxx 的情况下不分青红皂白地使用 -Werror 不一定是好的主意。我知道警告令人惊讶,但它确实有效,所有元素都按预期初始化为零。 (尽管正如 AnT 指出的那样,使用
({})很奇怪,应该不鼓励,如果你这样做,孩子们会在街上指着你笑)。 -
@JonathanWakely 是的,同意,使用
-Wno-xxxx很有用,但在这种情况下,我可能不想使用-Wno-missing-field-initializers,因为我可能想要它警告的其他情况。同意({})确实很奇怪,但如果将示例更改为std::array<int, 10> arr = {};,问题仍然存在。 -
... 并且可以说是一个答案,唯一指出
({})很奇怪并不是真正的答案。可能被认为是一个糟糕的答案,因为它现在阻止了对问题的合理编辑,这将简化它并删除不是真正的核心问题。
标签: c++ c++11 compiler-warnings g++4.8 aggregate-initialization