C ++:为什么我们不能引用引用或引用数组?

时间:2010-02-23 20:46:15

标签: c++ reference

我注意到没有引用引用但是有指向指针的指针,并且没有引用数组但是指针数组。

有人可以给我任何理由吗?

4 个答案:

答案 0 :(得分:15)

指针是可变的(如果是非常量),引用永远不会。因此,没有必要指向引用的指针或引用。

此外,引用必须始终引用某些东西 - 没有空引用这样的东西。这就是为什么没有引用数组的原因,因为没有办法将数组中的引用实例化为有意义的值。

答案 1 :(得分:12)

符合C ++标准8.3.2 / 4:

  

不应引用引用,不引用引用数组,也不引用引用指针。

答案 2 :(得分:10)

引用是语言级别的抽象。这是将变量别名化为另一个变量的不透明方式。虽然在幕后,编译器可能会使用指针来计算引用,但它们在更高级别上是非常不同的东西。另一方面,程序员明确地使用指针来实现间接。指针变量是与其指向的不同的变量。引用应该被认为好像它只是原始变量的别名,而不是它是另一个持有地址的变量。因此,变量别名的别名只是变量本身的别名。考虑到绑定,对变量的引用是编译时的事情可能有助于理解这种行为背后的基本原理。

有了这个推理,你可以争辩说,因为数组是存储值而不是变量的结构,所以它们能够存储变量的别名是没有意义的。基本上,一个引用变量(我指的是指针,如果存在,可能被编译器用来连接引用)对于C ++级别的程序员来说是不可见的。如果可以声明引用数组,编译器可能需要传递给数组的常量索引才能在编译时解析绑定。

答案 3 :(得分:4)

C ++标准8.3.2 / 4:

There shall be no references to references, no arrays of references, and no pointers to references.

这背后的原因是在运行时不存在引用本身。引用仅仅是位置的另一个名称。它们是不变的。