2014-09-05 108 views
3


關於C++ Primer第5版書中有一個練習(2.25),我想不通。
C++ Primer練習2.25

練習2.25:確定以下每個 變量的類型和值。
(a) int* ip, &r = ip;

現在,這本書讓這個例子:

int i = 42; 
int *p; // p is a pointer to int 
int *&r = p; // r is a reference to the pointer p 

所以,我的問題是,爲什麼要在這個練習中& r表示不*操作?是否有任何差別最小寫入

int *&r = ip; 

int &r = ip; 

(其中IP是一個指針爲int)

+0

這個'int * ip,&r = ip;'是一個無效的聲明。這本書的目的是向讀者展示一個無效的聲明嗎?或者這只是書中的錯誤? – AnT 2014-09-05 13:55:21

+0

這本書是錯誤的。 – 2014-09-05 13:56:25

回答

7

我想這本書的作者認爲簽名int*將進行到所有的逗號分隔的變量聲明,使得r到指針的引用。確實the code does not compile,因爲這是不正確的。 ip被聲明爲指向int的指針,並且r僅聲明爲對int的引用。

編譯器把

int * ip, &r = ip; 

等同於

int * ip; 
int & r = ip; // won't compile 

你需要一個額外的*將其申報爲指針類型的引用:

int *op, *&r = ip; 

您也可以使用typedef

typedef int* IntPtr; 
IntPtr op, &r = ip; 
6

你很迷惑。

我發現the errata page,和它指出

頁59:運動2.25(a)項應是int * IP,I,& R = I;

這使得整體更有意義。

(這可能是一條評論,但這裏更容易閱讀......)