Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化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 - Fatal编程技术网

初始化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++对新来者不可访问的。 “我知道,编译器实现引用作为指针” 不,他们没有

编辑: 总结一下:

  • 引用是对象的替代名称
  • 引用类型是通过在被引用对象的类型后面附加“&”来创建的
  • 引用与每个上下文中的引用对象相同
  • 它们不像指针那样存储对象的内存,这里的“运算符”和“地址”的存在是误导性的

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

引用是对象的别名,这就是该类型赋值工作的原因。

int&是一种类型

&var是获取地址的操作


相同的符号。完全不同的门面。可能是专门设计来保持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不同)。我知道,编译器将引用实现为指针。我认为引用可以被视为静态指针?你可以以任何方式看到它们,但重要的是它们的使用方式。我会把重点放在差异上,而不是相似性上,因为相似性让你感到困惑。总结一下:引用是对象的替代名称。引用类型是通过在被引用对象的类型后面附加“&”来创建的。引用与每个上下文中的引用对象相同。它们不像指针那样存储对象的内存,“运算符”和“地址”的存在在这里是误导性的