在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的指针)
?
我想这本书的作者认为签名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)