簡體   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