数组类型不可分配

时间:2014-09-23 04:52:54

标签: c++ arrays

我需要创建一个对数组的两个引用,这个引用可以引用同一个数组。我尝试了以下方法:

extern int (&a)[];
extern int (&b)[];

int main()
{
    b = a; // error: array type 'int []' is not assignable
}

有没有办法在c ++中做到这一点?

1 个答案:

答案 0 :(得分:5)

两件事:第一个arrays不能出现在赋值运算符的左侧。 cppreference可能直接从标准中获取文本,特别是:

§8.3.4

  

5 无法修改数组类型的对象,请参阅3.10。

另外,就像cppreference所说,数组是左值:

§3.10

  

1 表达式根据分类法进行分类   图1. - 左值(所谓的历史,因为左值可以   出现在赋值表达式的左侧)指定a   功能或对象。

虽然,该标准明确指出无法修改数组类型的对象,因此得出结论:数组(它们是对象)不能出现在赋值运算符的左侧。

其次,如果你这样做,编译器可能不会抱怨:

int a = 50, c = 42;
int& b = a;
b = c;
b = 80;
std::cout << a << " " << c; // 80 42

您会看到c保持不变。请参阅parashift C++-faq

[8.5] How can you reseat a reference to make it refer to a different object?

  

没办法。

     

您无法将引用与引用分开。

     

与指针不同,一旦引用绑定到对象,它就可以   被“重新安置”到另一个对象。引用本身不是对象   (它没有身份;拿参考的地址给你   指示物的地址;记住:引用它的指示物。)