在c ++ 11中对结构数组进行括号初始化

这是我的代码:

#include <string> struct A { int a; std::string sa; }; int main() { A arr[3]{}; } 

当我用gcc 4.8.2 (在Ubuntu 14.04上)用-std=gnu++11选项进行编译时,出现以下错误:

 example.cpp: In function 'int main()': example.cpp:11:14: internal compiler error: in gimplify_init_constructor, at gimplify.c:4271 A arr[3]{}; ^ 

为什么会抛出内部编译器错误? 这是一个编译器错误?

一个内部编译器错误总是一个编译器错误,并没有说明代码是否有效。

如果代码无效,编译器应该给出一个错误消息,告诉你代码有什么问题。 内部编译器错误只会告诉你编译器有什么问题。

鉴于这个内部编译器错误在更新的版本中仍然存在(我刚刚检查了4.9.2,以及截至1月29日的当前数据源),我通常强烈鼓励将这个错误报告给GCC开发人员,但是快速搜索这已经是他们所知道的了 。

你可以通过写A arr[3]{{}};来解决它A arr[3]{{}}; ,这意味着同样的事情。 它包含与arr的第一个元素相同的初始化程序,它默认已经获得。