这非常有效......
int a[5] = {1,2,3,4,5}, int *p = a;
int *& ref = p;
Run Code Online (Sandbox Code Playgroud)
但为什么这不起作用?
int a[5] = {1,2,3,4,5};
int*& ref = a;
Run Code Online (Sandbox Code Playgroud)
这两个a和p是指针,并具有相同的值(地址a[0]).当我使用指针(p)引用数组时,它工作得很好.
但是当我a[]直接引用该数组时,它不起作用......为什么?
Rak*_*111 25
a不是指针,它是一个数组.它有类型int[5].它可以做的是衰减到指针int*,这是在第一种情况下发生的事情.所以,参考p是可以的.
现在是第二种情况.请记住,a是不是一个指针.所以,有一个隐式转换的发生int[5]到int*.转换的结果是prvalue.但是你不能将一个非常量左值引用(这是什么ref)绑定到右值!所以代码无法编译.
这是一个类比:
double a = 1.4;
int& b = a; // implicit conversion from 'double' to `int` results in prvalue
// and you can't bind non-const lvalue refs to rvalues.
Run Code Online (Sandbox Code Playgroud)
添加已经回答的内容,您可以获得对数组的引用
int a[5];
int (&ref)[5] = a;
Run Code Online (Sandbox Code Playgroud)