在c ++入门(第5版)中,提到不允许从大括号的值列表中分配std :: array。
因为右侧操作数的大小可能与大小不同 对于左侧操作数,数组类型不支持assign和 它不允许从大括号的值列表中赋值。
下面以代码为例。
std::array<int, 10> a1 = {0,1,2,3,4,5,6,7,8,9};
std::array<int, 10> a2 = {0}; // elements all have value 0
a1 = a2; // replaces elements in a1
a2 = {0}; // error: cannot assign to an array from a braced list
但是,当我使用c ++ 11编译器编译此code时,效果很好。现在可以使用吗?还是我想念什么?
答案 0 :(得分:2)
是的,可以从括号列表中分配一个std::array
。它只能在C ++ 11规则下正常工作-该类无需执行任何特殊操作即可支持它。 Consider:
struct S {int x; int y;};
int main() {
S s{1, 2};
s = {3, 4};
}
S
是一个聚合,可以通过大括号初始化列表构造。此外,S
具有一个隐式声明的赋值运算符,它采用const S&
。将两者放在一起,编译器将s = {3, 4}
解释为s.operator=(S{3, 4})
std::array
也会发生同样的情况。