正如标题本身所提到的 - 为什么指向引用的指针是非法的,而反向在C ++中是合法的?
感谢。
答案 0 :(得分:45)
指针需要指向对象。引用不是对象。
如果您有一个引用r
,一旦它被初始化,每次使用r
时,您实际上都在使用引用引用的对象。
因此,您无法获取引用的地址,以便能够首先获得指向它的指针。请考虑以下代码:
int x;
int& rx = x;
int* px = ℞
在最后一行中,&rx
获取rx
引用的对象的地址,因此它与您说&x
的内容完全相同。
答案 1 :(得分:14)
引用实现的高级概念只是现有对象的另一个名称。您可以拥有指向对象(或函数)的指针,但不能指向对象的名称。出于这个原因,指向引用的指针的想法毫无意义。换句话说,引用并不重要,一般情况下它们根本就不存在于内存中。它们不存在可以指向的东西。
确实,在实践中,许多情况下引用会占用内存(并且伪装成指针实现)。但这只是特定于某些特定情境的实现细节。一般情况下,引用不占用内存,,如语言规范中明确规定的那样,紧跟语言规范。
答案 2 :(得分:4)
指向引用(指向对象)的指针和指向实际对象的指针之间的区别是什么?无法更改引用以引用其他对象。只需使用指向相关对象的常规指针。
另一方面,对指针的引用与任何其他引用一样,为您提供特定变量的可修改句柄。在这种情况下,它恰好是一个指针。
答案 3 :(得分:1)
因为引用不是可以指向的东西,而这又是因为它实际上不必在内存中的任何地方表示。存在引用以给已存在的事物提供备用名称。你可以得到一个指向重命名的东西的指针,但这是一个指向值的指针,而不是指向引用的指针。
答案 4 :(得分:0)
假设“ int *&X”是合法的,因为引用只是对象的另一个名称,所以表达式等于“ int * X”并且没有用。