关于初始化引用指针的引用的问题 我们知道C++中可以用引用引用的对象的对象变量来初始化引用。例如,我们可以使用int变量初始化对int的引用: int i; int& r=i;
但当涉及到指针时,情况变得混乱。假设我需要定义对指针的引用:关于初始化引用指针的引用的问题 我们知道C++中可以用引用引用的对象的对象变量来初始化引用。例如,我们可以使用int变量初始化对int的引用: int i; int& r=i;,c++,pointers,reference,initialization,C++,Pointers,Reference,Initialization,但当涉及到指针时,情况变得混乱。假设我需要定义对指针的引用: int* & r 要初始化它,我们需要分配r一个指向int的指针。以下代码有效(继续上面的代码): 但以下代码会导致编译错误,即使=的右侧确实是指向int的指针: int* & r = &i; 错误消息是: “正在初始化”:无法从“int*”转换为“int*&” 为什么??为什么编译器可以从int转换为int&,但不能从int*转换为int*&?为什么我可以用p初始化,但不能用&I初始化?他们不一样吗 PS
int* & r
要初始化它,我们需要分配r
一个指向int的指针。以下代码有效(继续上面的代码):
但以下代码会导致编译错误,即使=的右侧确实是指向int的指针:
int* & r = &i;
错误消息是:
“正在初始化”:无法从“int*”转换为“int*&”
为什么??为什么编译器可以从int
转换为int&
,但不能从int*
转换为int*&
?为什么我可以用p
初始化,但不能用&I
初始化?他们不一样吗
PS:我正在Windows上使用Visual Studio 2015。让我们使用另一个编译器,看看它是否更有意义: 错误:无法将“int*&”类型的非常量左值引用绑定到“int*”类型的右值 此诊断可以更好地解释问题
int*&
是一种左值引用类型&i
是一个右值表达式。正如错误所解释的,非常量左值不能绑定到右值表达式
难道[p
和&i
]不一样吗
它们不一样p
是一个id表达式。变量的Id表达式是左值
&p
表达式是一元&
运算符。运算符的结果是一个prvalue。我明白了。所以我应该写int*&&r=&I代码>。谢谢您的帮助。@user5280911您可以这样写。我不知道为什么应该,或者为什么我想。
int* & r = &i;