在C++中,拥有一个指向引用的指针是否合法?
例如:
例如:
int &ref = array[idx];
func(&ref);
如果您无法更改已存在的库中的func()函数,那么我能想到的一个原因是您可能希望这样做。
int &ref = array[idx];
func(&ref);
如果您无法更改已存在的库中的func()函数,那么我能想到的一个原因是您可能希望这样做。
这段代码是合法的,但它并没有创建一个指向引用的指针。它创建了一个指向被引用对象(即引用目标)的指针。
如果你所说的“拥有一个引用的指针”是指获取引用的地址(如你的示例:&ref
),那么这是完全合法的。任何变量都是标识符,因此根据C++-03的§ 5.3.1-2,可以应用&
。具有引用类型的表达式是lvalue,因此同一节中也适用&
。
如果你所说的“拥有一个引用的指针”是指一个指向引用的指针类型(例如int &*
),那么根据§ 8.3.2-4(以及§ 8.3.1-4的注释),不行。
&
应用于引用的值等于将&
应用于所指物的值是另一回事,也就是行为而不是合法性的问题。 - outis&
,如&ref
,会导致编译器执行以下操作:(1)找到指向对象,(2)获取在步骤1中找到的lvalue的地址。在任何时候,“引用的地址”这个概念都没有意义。 - Ben Voigt