为什么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?
修改 总结一下:
答案 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