初始化C ++参考 - 为什么不使用address-of运算符?

时间:2012-03-28 00:06:53

标签: c++ reference

为什么C ++引用的初始化在没有“adress-of”运算符(&)的情况下有效?
对于类型为A的引用,类型为A&的Object的赋值是不是错误?
作业不应该使用“&”操作员在右侧?

int var = 2
int& ref = var  //why can we assign var of type 'int' to ref of type 'int&'?
int& ref = &var //shouldn't it be like that, so that we will assign the ADRESS to the reference?

修改 总结一下:

  • 引用是Objects的替代名称。
  • 通过附加'&'来创建参考类型到引用对象的类型。
  • 引用与每个上下文中的引用对象相同。
  • 他们不会像指针那样存储对象的内存,“adress-of”运算符'&'的存在在这里误导了。

3 个答案:

答案 0 :(得分:3)

引用不包含对象的地址,正如您的评论所暗示的那样。那是一个指针。 引用!=指针

引用是对象的别名,这就是分配类型的原因。

答案 1 :(得分:0)

INT&安培;是一种类型

& var是一个获取地址的操作。

相同的符号。完全不同的玩具。可能专门设计用于让新手无法访问C ++。

答案 2 :(得分:0)

“我知道,编译器将指示实现为指针”

不,他们没有。这是混淆的常见原因。当你这样做时:

int p;
int *r = &p;

您正在创建一个32位指针到内存中,您可以使用它来操作数据。

但是,当你这样做时:

int p;
int& r = p;

您没有使用指向p的指针。有一个对象p,可能驻留在寄存器,堆栈或堆中,这并不重要。声明意味着r也引用同一个对象。它不是指向对象的指针:如果创建指针,则表示您正在创建一个新对象。你是说“r指向p。”但是,使用引用,您说“r p。”没有创建新对象(指针)。出于所有意图和目的,int& r p,因为任何使用引用(不指向)p。

让我这样说吧:

就像是说这个人,戴夫。 他住在(制作地址)

这指向戴夫。

然后他有一个绰号,OrgnlDave。

OrgnlDave没有指向Dave,它 Dave,这只是另一种说法。只有一个戴夫。说“喜欢OrgnlDave”等于说“嗨戴夫”,这与发送戴夫一封信不同。

在伪代码中,

person Dave;
address(Dave, made-up-address) pointer;
person& OrgnlDave means Dave; // and we indicate that by using the &

Hi(pointer);   // Sends Dave a cordial letter
Hi(Dave);      // Says hi to Dave
Hi(OrgnlDave); // Says hi to Dave