C ++中的Reference Variable有什么价值?

时间:2009-01-05 01:43:28

标签: c++

指针存储/被分配了一个内存地址;

参考变量怎么样?

它存储对象的实际值,就像Stack上的任何其他非指针简单变量一样?

谢谢!

4 个答案:

答案 0 :(得分:15)

引用本身不包含任何内容。 C ++标准甚至声明不需要实现为引用分配任何存储。它实际上只是它引用的对象或函数的别名。尝试获取引用的值将获取对象或函数的值(在这种情况下,您将获得一个函数指针,就像当您尝试使用其原始名称从函数中获取值时),它引用,代替。

当然,当你进入较低级别并查看汇编程序代码时,引用就像指针一样。但在语言层面,它们是完全不同的野兽。例如,对const的引用可以绑定到temporaries,它们需要实现一个复制构造函数,用于重载运算符并且它们不能被放入一个数组中(即使你初始化它的所有元素也没有),因为引用是no对象(与指针相对)。它们听起来很简单,就像参考类型一样。

答案 1 :(得分:4)

在内部,它只是指向对象的指针(虽然标准不一定强制要求,所有编译器都以这种方式实现)。在外部,它的行为与对象本身相似。可以把它想象成一个带有隐式'*'运算符的指针,无论它在哪里使用(当然,除了声明)。它也是一个const指针(不要与指向const的指针混淆),因为它一旦声明就无法重定向。

答案 2 :(得分:3)

  

它存储对象的实际值,就像Stack上的任何其他非指针简单变量一样?

不完全是:因为您没有两个值的副本(对象中的一个副本,以及对象引用中的另一个副本);相反,引用可能实现为指向对象的指针。

指针和对象之间的差异:

  • 引用不能为空
  • 引用不能是未初始化的(必须在定义时初始化)
  • 引用无法更改为引用其他对象

答案 3 :(得分:2)

我会说它只是一个具有不同语法的指针。