C++ 为什么是C++;有一个引用类型&&引用;?

C++ 为什么是C++;有一个引用类型&&引用;?,c++,C++,C++已经有了指针类型,它已经非常强大了,但是它也有引用类型,它的大部分工作也可以通过指针来完成,那么引用类型的优势是什么呢?为什么C++的创建者将此类型添加到它中?首先,它表示对象不能为null 第二,它不能指定给指向另一个变量。首先,它表示对象不能为空 其次,它不能被指定指向另一个变量。答案是“复制构造函数” C++是一种基于值的语言。当你说foox;fooy=x,您需要一种方法使y具有与x相同的值。为此,您需要一个复制构造函数。复制构造函数必须将x对象作为参数,但它不能复制它,因为这正是我

C++已经有了指针类型,它已经非常强大了,但是它也有引用类型,它的大部分工作也可以通过指针来完成,那么引用类型的优势是什么呢?为什么C++的创建者将此类型添加到它中?

首先,它表示对象不能为null


第二,它不能指定给指向另一个变量。

首先,它表示对象不能为空

其次,它不能被指定指向另一个变量。

答案是“复制构造函数”

C++是一种基于值的语言。当你说
foox;fooy=x
,您需要一种方法使
y
具有与
x
相同的值。为此,您需要一个复制构造函数。复制构造函数必须将
x
对象作为参数,但它不能复制它,因为这正是我们试图定义的操作

因此,它必须通过引用来接受论点

(你本可以让复制构造函数行为怪异并获取地址,但这会让语言变得混乱,特别是考虑到它是从C语言演变而来的。一个新的类型特性是一个更干净、更强大的解决方案。)

答案是“复制构造函数”

C++是一种基于值的语言。当你说
foox;fooy=x
,您需要一种方法使
y
具有与
x
相同的值。为此,您需要一个复制构造函数。复制构造函数必须将
x
对象作为参数,但它不能复制它,因为这正是我们试图定义的操作

因此,它必须通过引用来接受论点


(你本可以让复制构造函数行为怪异并获取一个地址,但这会出乎意料,会把语言搞得一团糟,特别是考虑到它是从C语言演变而来的。一个新的类型特性是一个更干净、更强大的解决方案。)引用在其生命周期中仅引用一个对象,并且它必须有一个要引用的对象(不能为null)


在我相信的中,C++的创建者只使用引用(例如C ^),但是必须允许指针的使用有两个原因:C++中的引用不够强大,不能满足所有需要的功能,并且C++被承诺与C(C++编译C++的每一件东西)都具有可比性。引用在其生命周期中仅引用一个对象,并且它必须有一个要引用的对象(不能为null)


在我相信的中,C++的创建者只使用引用(例如C ^),但是必须允许指针的使用有两个原因:C++中的引用不够强大,不能满足所有需要的功能,并且C++被承诺与C(C++编译C++的每一件东西)都具有可比性。

如何通过指针使用算术运算符<代码>*a=*c+*d**c:)问题的第一部分(优点是什么)基本上已经回答了,而第二部分(为什么添加它们)已经回答了。通过指针使用算术运算符如何<代码>*a=*c+*d**c:)问题的第一部分(优点是什么)基本上已经得到了回答,而第二部分(为什么添加它们)已经得到了回答。我认为这个答案不是特别好。它单独列出了引用的一个用途,也可以被指针覆盖,并且只提供了一个弱的主观推理,说明引用是一个更好的选择-1问题不在于参考文献有什么好处,而在于比亚恩为什么要添加它们。这个答案和他所想的一样好+1.如果复制构造函数将采用指针,则语法将为
fooy=&x
或必须存在隐式转换。DyP,已经存在到引用类型的隐式转换。@devmac和到指针类型的隐式转换将不符合
C
关于指针的规范。这也是
C++
的目标。我认为这个答案并不特别好。它单独列出了引用的一个用途,也可以被指针覆盖,并且只提供了一个弱的主观推理,说明引用是一个更好的选择-1问题不在于参考文献有什么好处,而在于比亚恩为什么要添加它们。这个答案和他所想的一样好+1.如果复制构造函数将采用指针,则语法将为
fooy=&x
或必须存在隐式转换。DyP,已经存在到引用类型的隐式转换。@devmac和到指针类型的隐式转换将不符合
C
关于指针的规范。这也是《代码> C++ +/>代码的目标。C语言中的引用(和其他语言中的类似事物)看起来像C++引用,但实际上它们是完全不同的。这在多大程度上是由于执行模式中的其他差异引起的,还有待讨论,但无论如何我怀疑这是一个有益的类比。我同意C++和C语言中的引用在概念上和概念上是不同的,但是我相信,原意是相同的,只是在C++中它们有约束,阻止它们达到相同的东西。看起来像C++参考,但它们实际上是完全不同的。这在多大程度上是由于执行模式中的其他差异引起的,还有待讨论,但无论如何,我怀疑这是一个有益的类比。我同意C++和C语言中的引用在概念上和概念上不同,但我相信,最初的意图是一样的,只是在C++中,它们有约束,阻止它们达到相同的目的。