初始化C++;参考-为什么不使用操作员的地址? 为什么C++引用的初始化没有“操作符”(它是)?br> 将类型为a的对象分配给类型为a&的引用不是错误的吗 作业不应该在右侧使用“&”运算符吗 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?
编辑: 总结一下:初始化C++;参考-为什么不使用操作员的地址? 为什么C++引用的初始化没有“操作符”(它是)?br> 将类型为a的对象分配给类型为a&的引用不是错误的吗 作业不应该在右侧使用“&”运算符吗 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?,c++,reference,C++,Reference,编辑: 总结一下: 引用是对象的替代名称 引用类型是通过在被引用对象的类型后面附加“&”来创建的 引用与每个上下文中的引用对象相同 它们不像指针那样存储对象的内存,这里的“运算符”和“地址”的存在是误导性的 引用不包含对象的地址,正如您的注释所暗示的那样。那是一个指针引用!=指针 引用是对象的别名,这就是该类型赋值工作的原因。int&是一种类型 &var是获取地址的操作 相同的符号。完全不同的门面。可能是专门设计来保持C++对新来者不可访问的。 “我知道,编译器实现引用作为指针” 不,他们没有
- 引用是对象的替代名称
- 引用类型是通过在被引用对象的类型后面附加“&”来创建的李>
- 引用与每个上下文中的引用对象相同
- 它们不像指针那样存储对象的内存,这里的“运算符”和“地址”的存在是误导性的
相同的符号。完全不同的门面。可能是专门设计来保持C++对新来者不可访问的。 “我知道,编译器实现引用作为指针” 不,他们没有。这是一个常见的混淆源。执行此操作时:
int p;
int *r = &p;
int p;
int& r = p;
例如,您正在内存中创建一个32位指针,可以用来操作数据
但是,执行此操作时:
int p;
int *r = &p;
int p;
int& r = p;
您没有使用指向p的指针。有一个对象p,它可能位于寄存器、堆栈或堆中,这并不重要。该声明意味着r也在引用同一个对象。它不是指向对象的指针:如果创建指针,则创建新对象。你说的是“r指向p”。然而,使用引用,你说的是“r是p”。没有创建新对象(指针)。出于所有意图和目的,int&r是p,因为它的任何用法都引用(而不是指向)p
让我这样说:
这就像说有一个人,戴夫。
他住在(虚构的地址)
这指向戴夫
然后他有了一个绰号,奥格尔戴夫
Dave不是指Dave,是Dave,这只是另一种说法。只有一个戴夫。说“你好,戴夫”等于说“你好,戴夫”,这与给戴夫写信不同
在伪代码中
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
因为它不是指针。“为什么我们可以将
int
类型的var赋值给int&
类型的ref?”如果这是一个真正的问题,那么我认为你真的需要重新开始。是的,我正在读一本书,目前我正在尝试理解为什么C++中引用和指针存在的原因,而C++中却没有。它被放在C语言之上,以简化程序员在C语言中经常做的一些事情(尽管,这不是唯一的原因,C语言确实是一种很好的语言)。处理指针是被简化的事情之一。通过添加引用,它被简化了。我不知道有什么事情可以用引用来完成,但有一些事情可以用指针来完成,而引用来完成不了。(例如:默认对象构造将替换,但与在出现故障时返回null不同)。我知道,编译器将引用实现为指针。我认为引用可以被视为静态指针?你可以以任何方式看到它们,但重要的是它们的使用方式。我会把重点放在差异上,而不是相似性上,因为相似性让你感到困惑。总结一下:引用是对象的替代名称。引用类型是通过在被引用对象的类型后面附加“&”来创建的。引用与每个上下文中的引用对象相同。它们不像指针那样存储对象的内存,“运算符”和“地址”的存在在这里是误导性的