![](/img/trans.png)
[英]Why converting a pointer into a reference doesn't work in my accessor (getter)?
[英]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;
a
和p
都是指针并且具有相同的值( 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*& ref = a;
int*
是指针类型,而不是数组类型。 所以,这就是为什么它不会绑定到具有int[5]
类型的a
。
所以,使用const
int* const& ref = a;
它工作正常,因为数组名称是地址常量,非const引用不能引用常量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.