![](/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.