2014-09-05 112 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;

这使得整体更有意义。

(这可能是一条评论,但这里更容易阅读......)