繁体   English   中英

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

[英]Why doesn't a reference to an array work until we use a pointer?

这非常有效......

int a[5] = {1,2,3,4,5}, int *p = a;
int *& ref = p;

但为什么这不起作用?

int a[5] = {1,2,3,4,5};
int*& ref = a;

ap都是指针并且具有相同的值( a[0]地址)。 当我使用指针( p )引用数组时,它工作得很好。

但是当我直接引用那个数组a[] ,它不起作用......为什么?

a不是指针,而是数组。 它的类型为int[5] 它可以做的是衰减到指针int* ,这是在第一种情况下发生的事情。 所以,参考p是可以的。

现在是第二种情况。 请记住, a 不是指针。 因此,从int[5]int*发生了隐式转换。 转换的结果是prvalue。 但是你不能将一个非const左值引用(这是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.

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

int a[5];
int (&ref)[5] = a;

生活

int*& ref = a;

int*是指针类型,而不是数组类型。 所以,这就是为什么它不会绑定到具有int[5]类型的a

所以,使用const

int* const& ref = a;

它工作正常,因为数组名称是地址常量,非const引用不能引用常量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM