c++;指向引用的指针 < P> C++中有一个引用指针是合法的吗?

c++;指向引用的指针 < P> C++中有一个引用指针是合法的吗?,c++,C++,例如: int &ref = array[idx]; func(&ref); 我能想到的一个原因是,如果func()已经存在于一个无法更改的库中,那么您可能需要这样做。如果“拥有引用的指针”是指获取引用的地址(如示例:&ref),那么这是完全合法的。任何变量都是标识符,因此C++-03的§5.3.1-2可以应用&。带有引用类型的表达式是左值,因此&适用于同一节 如果“具有引用指针”指的是指向引用的指针类型(例如,int&*),则§8.3.2-4(以及§8.3.1-4中的注释)中

例如:

int &ref = array[idx];
func(&ref);
我能想到的一个原因是,如果func()已经存在于一个无法更改的库中,那么您可能需要这样做。

如果“拥有引用的指针”是指获取引用的地址(如示例:
&ref
),那么这是完全合法的。任何变量都是标识符,因此C++-03的§5.3.1-2可以应用
&
。带有引用类型的表达式是左值,因此
&
适用于同一节


如果“具有引用指针”指的是指向引用的指针类型(例如,
int&*
),则§8.3.2-4(以及§8.3.1-4中的注释)中的“否”。

。可以获取引用的地址,但“指向T引用的指针”不是有效类型。您在这里所做的是获取指向对象本身的指针,因为对对象的引用只会创建另一个名称,您可以通过该名称访问同一对象。

指针指向对象,而引用不是指向该对象的指针。引用只是一个别名


这篇文章提供了一些信息-

说明代码是合法的,但它没有创建指向引用的指针。它创建指向引用对象(引用目标)的指针。

这并不能回答问题。没有“获取引用地址”。引用是透明的,运算符(&)的地址应用于引用的对象。@outis,它清楚地询问“指向引用的指针”。您的回答没有提到指针。@Ben:表达式可以有引用类型。将
&
应用于引用的值等于将
&
应用于引用对象的值是另一回事,即行为而不是合法性。@Matthew:
&
产生指针。我的答案中暗含着指针。DasBoot指针可能还有什么其他用途,我不会冒险去猜测。不,引用不是对象本身。但是命名引用会导致对引用的对象执行操作,在这种情况下是操作地址。@Ben:引用可能以某种方式实现(例如指针),但在语言级别上,它是对象,因为ref和obj始终以完全相同的方式运行。我认为我们在本质上是同意的,但你发现措辞不恰当,在这种情况下,我不得不承认这不是我的创作:常见问题解答总体上很好,但这个特定的答案有一些不幸的过于简单化。这个错误已经在其他堆栈溢出问题中被否决了,但是最简单的证明,引用不是对象,是在调用析构函数时考虑的。