在我们使用指针之前,为什么对数组的引用不起作用?

Gau*_*Nag 12 c++ reference

这非常有效......

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)

这两个ap是指针,并具有相同的值(地址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)


Pas*_* By 9

添加已经回答的内容,您可以获得对数组的引用

int a[5];
int (&ref)[5] = a;
Run Code Online (Sandbox Code Playgroud)

生活

  • @Scheff这需要更新的C++吗?真?我认为这是古老的语法.[看起来很好](https://godbolt.org/g/vsCiBz) (4认同)