bor*_*ree 6 c++ arrays language-lawyer c++11
在c ++ primer(第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
Run Code Online (Sandbox Code Playgroud)
但是,当我使用c ++ 11编译器编译此代码时,它工作正常.这是现在允许还是我错过了什么?
是的,astd::array可以从花括号列表中分配。它只是在 C++11 规则下正常工作 - 该类不需要做任何特殊的事情来支持它。考虑:
struct S {int x; int y;};
int main() {
S s{1, 2};
s = {3, 4};
}
Run Code Online (Sandbox Code Playgroud)
作为一个聚合,S可以从大括号初始化列表构造。此外,S还有一个隐式声明的赋值运算符 take const S&。将两者放在一起,编译器解释s = {3, 4}为s.operator=(S{3, 4})
同样的情况也发生在std::array.
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |