我正在阅读Stroustrup撰写的TCPPPL。在“数组”主题中,我发现了这个:
char v4[3]={'a', 'b', 0};
然后它提到“没有匹配初始化的数组赋值”,即。以下是错误:
void f()
{
v4={'c','d',0}; //error: no array assignment
}
作者的意思是什么?他是否意味着在初始化阵列后你无法重新分配它?
答案 0 :(得分:4)
他是否意味着在初始化阵列后你无法重新分配它?
是。你不能改变阵列"一个数组包含。您可以更改数组中每个元素的值,但不能将数组分配给另一个数组。
int a[] = {1,2,3};
int b[] = {4,5,6};
b = a; // this is also illegal
这是使用std::string
,std::array
和std::vector
等标准容器的一个原因。它们是可分配和可复制的(并且可移动)。
答案 1 :(得分:1)
作者的意思是什么?他是否意味着在初始化阵列后你无法重新分配它?
是的,这是正确的。虽然,您无法在初始化之前分配数组,因此应简化为:“您无法分配数组”。
答案 2 :(得分:0)
除了现有答案之外,还需要注意一件有趣的事情。 C++ 标准的第 11.4.5 条指出:
<块引用>非联合类 X 的隐式定义的复制/移动赋值运算符执行其子对象的成员复制/移动赋值......如果子对象是数组,则以适合于元素类型。”
所以下面的代码是绝对有效的。
struct { int c[3]; } s1, s2 = {3, 4, 5};
s1 = s2;