在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的指针)
答案 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;
这更有意义。
(这应该是评论,但在这里更容易阅读......)