C++ Primer练习2.25

P. *_*ski 3 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
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,为什么在那个练习中&r没有*运算符?写作有什么不同吗?

int *&r = ip;
Run Code Online (Sandbox Code Playgroud)

要么

int &r = ip;
Run Code Online (Sandbox Code Playgroud)

(其中ip是指向int的指针)

0x4*_*2D2 7

我想这本书的作者认为签名int*会执行所有逗号分隔的变量声明,从而r引用指针.实际上代码没有编译,因为这不是真的.ip被声明为指向an的指针,int并且r只被声明为对它的引用int.

编译器解释

int * ip, &r = ip;
Run Code Online (Sandbox Code Playgroud)

等价于

int * ip;
int & r = ip; // won't compile
Run Code Online (Sandbox Code Playgroud)

你需要一个额外*的声明它作为指针类型的引用:

int *op, *&r = ip;
Run Code Online (Sandbox Code Playgroud)

你也可以使用typedef:

typedef int* IntPtr;
IntPtr op, &r = ip;
Run Code Online (Sandbox Code Playgroud)


mol*_*ilo 6

你很困惑.

我找到了勘误页面,并说明了这一点

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

这使得更有意义.

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