我需要创建一个对数组的两个引用,这个引用可以引用同一个数组。我尝试了以下方法:
extern int (&a)[];
extern int (&b)[];
int main()
{
b = a; // error: array type 'int []' is not assignable
}
有没有办法在c ++中做到这一点?
答案 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?
没办法。
您无法将引用与引用分开。
与指针不同,一旦引用绑定到对象,它就可以不 被“重新安置”到另一个对象。引用本身不是对象 (它没有身份;拿参考的地址给你 指示物的地址;记住:引用是它的指示物。)