2012-04-28 85 views
0

我是C++的新手,我想了解下面的示例之間的區別。爲什麼我們不能使用&(* a),但可以使用typedef來實現它?

我們不能創造功能

void someFunc(int &*a){ 
    int *b=new int; //just for example 
    a=b; 
} 

,但使用的typedef

typedef int* pint; 

void someFunc(pint &a){ 
    int *b=new int; //just for example 
    a=b; 
} 

一切正常。

這只是一個編譯器技巧,還是這種行爲的原因更復雜?

+2

注意,'pint&a'是'int *&a',而不是'int&* a'。 – Griwes 2012-04-28 11:55:32

+1

我接受過培訓,可以讀取「內外」的C聲明......以變量名開頭,然後向外讀。由此,int&* a讀取指向int的指針。嘗試int *&a? – mjfgates 2012-04-28 11:57:35

+0

@mjfgates,謝謝,現在我明白我的錯誤在哪裏:) – 2012-04-28 11:59:18

回答

10

pint& a相當於int*& a而不是int&* a。您不能在C++中使用指針引用類型,但可以使用引用指針類型。

+0

謝謝,現在我明白了 – 2012-04-28 12:02:28

2

這是參考和指針的順序。在你的第一個例子是

int &*a 

這是一個指針,這是不允許的參考。在第二個它是

int *&a 

這是一個指針允許的引用。

相關問題