C ++ Primer练习2.25

时间:2014-09-05 13:31:41

标签: c++


在C ++ Primer第5版的书中有一个练习(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的指针)

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:6)

你很困惑。

我找到了the errata page,并说明了

  

第59页:练习2.25(a)应为int * ip,i,& r = i;

这更有意义。

(这应该是评论,但在这里更容易阅读......)