【发布时间】:2015-03-27 09:24:13
【问题描述】:
根据问题std::array c++11 initializer syntax error 不允许以这种方式将花括号列表分配给 std::array:
std::array<int, 10> a = {0,1,2,3,4,5,6,7,8,9};
a = {0}; // error: cannot assign to an array from a braced list
但实际上我无法再重现此错误。 我的 GCC 版本是 4.8.2。 代码如下:
#include <array>
int main() {
std::array<int, 10> a;
a = {1};
return 0;
}
它编译并执行没有任何错误。
所以,问题是,我在这里做错了吗?或者是否有任何变化导致了这种行为变化?
【问题讨论】:
-
编译器从花括号初始化器列表中创建一个临时的
std::array对象,然后将其分配给您的a变量。 -
是的,我很清楚。但这个问题是故意提出的,以了解实施中发生了哪些变化以及原因。
-
没什么,只是编译器被“修复”了。 C++ 编译器是非常复杂的程序,并且作为所有重要的程序,它都包含错误。
-
GCC 4.9.2 说这是 C++11 语法,需要用
-std=c++11 or -std=gnu++11编译...