为什么在C++中指向引用的指针是非法的?

Mah*_*esh 31 c++ pointers reference

正如标题本身所提到的 - 为什么指向引用的指针是非法的,而反向在C++中是合法的?

谢谢.

Jam*_*lis 45

指针需要指向一个对象.引用不是对象.

如果你有一个引用r,一旦它被初始化,你使用的任何时候r实际上都在使用引用引用的对象.

因此,您无法获取引用的地址,以便能够首先获取指向它的指针.请考虑以下代码:

int x;
int& rx = x;

int* px = ℞
Run Code Online (Sandbox Code Playgroud)

在最后一行中,&rx获取所引用的对象的地址rx,因此它与您所说的完全相同&x.

  • 到目前为止,这是最相关的答案.既然不可能获取引用的地址,那么指向它的指针是什么意思呢?您可以初始化此类指针的唯一值是NULL. (7认同)
  • 这条线为+0.5*"你不能把引用的地址放在第一个地方就能得到一个指针."*...而且这个*的+0.5"&rx获取对象的地址由rx引用,所以它和你说的&x完全相同."*....漂亮的解释! (2认同)

AnT*_*AnT 15

引用实现的高级概念只是现有对象的另一个名称.您可以拥有指向对象(或函数)的指针,但不能指向对象的名称.出于这个原因,指向引用的指针的想法毫无意义.换句话说,引用并不重要,一般情况下它们根本就不存在于内存中.它们不存在可以指向的东西.

确实,在实践中,许多情况下引用确实占用了内存(并且伪装成指针实现).但这只是特定于某些特定情境的实现细节.一般情况下,引用不占用内存,正如语言规范中明确指出的那样 紧接着语言规范.

  • @Nawaz:8.3.2/3`未指明引用是否需要存储` (5认同)
  • @Prasoon Saurav:在我的标准副本中,8.3.2/5明确地说"不应该引用引用,没有引用数组,也没有引用指针". (4认同)
  • @AndreyT:*可以说"并非所有孩子都很好"和"并非所有孩子都很顽皮"*....在这里尝试使用"一般"......"总的来说,穆斯林是恐怖分子"......"一般来说,穆斯林不是恐怖分子"......"一般来说,印第安人是白痴"和"一般来说,印第安人不是白痴"......"一般来说,你错了"和"一般来说,你没有错". ..这些**是**相互矛盾的陈述.期! (4认同)
  • @AndreyT:你说*"**一般情况下**案例引用不会占用内存,因为**在语言规范中明确指出**."*......这是非常误导的.如果它在这里应该有意义,那么每当规范使用术语"未指定"时,它应该在任何地方都有意义.....我重复规范说*"它是**未指定**是否引用需要存储"***不能**被翻译成"一般来说,参考文献不占用记忆". (4认同)
  • @Nawaz:显然我们对"一般情况"的含义有不同的理解.该标准确实表明引用是否占用存储是未指定的.这意味着可以说"一般情况下,引用不占用存储","一般情况下,引用占用存储".这两种说法都是对的.您只需使用与您的特定上下文相关的那个. (3认同)

Pot*_*ter 5

指向引用(对象)的指针和指向实际对象的指针有什么区别?不能将引用更改为引用另一个对象。只需使用指向相关对象的常规指针即可。

另一方面,对指针的引用,就像任何其他引用一样,为您提供了一个特定变量的可修改句柄。在这种情况下,它恰好是一个指针。