2015-06-18 27 views
1

在C++中作出了很大的意義,對於實施例中所有其他聲明的語法:C++參考變量定義語法推理

int i; 

iint

int *i; 

i被廢棄時,結果是int

int i[]; 

i被標註,其結果是和int

int *i[]; 

i被subscriped,然後將結果derefrenced,最終的結果是int

但是當你看參考變量的語法,否則這種一致的推理就會失敗。

int &i = x; 

「時的i的地址被佔用,則結果爲int 」是沒有意義的。

我是否錯過了一些東西,或者這真的是一個例外,以明顯的推理背後的其他sytaxes?如果它是一個例外,爲什麼選擇這個語法?

編輯:爲什麼&符號可能已經選擇用於這個目的,但不是是否存在是讀取來自上述方式不同的聲明一個普遍一致的方式

This question地址。

+1

可能的重複[爲什麼選擇符號作爲C++中引用的符號?](http://stackoverflow.com/questions/670154/why-was-the-ampersand-chosen-as-the-symbol- for-references-in-c) –

+0

此外,即使函數指針聲明語法與其餘部分一致。 'int(* i)(long)',當'i'被解析時,結果以'long'作爲參數被調用,最終的結果是一個'int'。 – Vaelus

回答

5

一旦綁定,引用就成爲它所指對象的別名,並且不能與它區分(除了decltype)。由於int&的使用與int完全相同,因此聲明後續使用語法不能用於聲明引用。

聲明引用的語法仍然非常簡單。只需寫下相應指針類型的聲明,然後用&&&替換用於初始取消引用的*

+0

你說聲明後面的使用語法是不可能的引用,但我相信'int *&我'會工作。目前它的意思是「'i'具有指向int的指針的類型引用」,但是如果事情發生了變化,它可能意味着「如果採用'i'的地址,然後結果被拒絕,最終的結果將是一個'int'「。對我來說,這似乎是更一致的。無可否認,對於某些人來說,這看起來可能更笨拙,但如果那確實是問題,爲什麼不使用新的符號呢? – Vaelus