【问题标题】:why C++ have a reference type "&"? [duplicate]为什么 C++ 有一个引用类型“&”? [复制]
【发布时间】:2013-04-24 13:40:58
【问题描述】:

C++已经有了指针类型,而且已经很强大了,但是它也有引用类型,它的大部分工作也可以通过指针来完成,那么引用类型有什么好处呢?为什么 C++ 的创造者在里面加了这个类型?

【问题讨论】:

  • 通过指针使用算术运算符怎么样? *a = *c + *d * *c
  • 问题的第一部分(有什么好处)基本上已经回答了here,而第二部分(为什么要添加)已经回答了here

标签: c++


【解决方案1】:

答案是“复制构造函数”。

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

所以它必须通过reference来获取参数。

(您可以使复制构造函数行为怪异并获取地址,但这会出乎意料并且会使语言变得一团糟,尤其是考虑到它是从 C 语言演变而来的。一种新的类型特性是一种更清洁、更强大的解决方案。)

【讨论】:

  • 我不认为这个答案特别好。它挑出了 one 用于引用的用途,它也可以被指针覆盖,并且仅提供了较弱的主观推理来证明引用是更好的选择。 -1
  • 问题不是引用有什么好处,而是 Bjarne 为什么要添加它们。这个答案和他可能一直在想的一样好。 +1。
  • 如果复制 ctor 采用指针,则语法为 Foo y = &x; 或必须进行隐式转换。
  • DyP,已经隐式转换为引用类型。
  • @devmac 和指针类型的隐式转换不会遵循 C 关于指针的规范。这也是C++ 的目标。
【解决方案2】:

首先表示对象不能为空。

第二,不能赋值为指向另一个变量。

【讨论】:

    【解决方案3】:

    reference 在他的生命中只引用一个对象,它必须有一个对象可以引用(不能为空)。

    我相信 C++ 的创建者的目标是仅使用引用(如 C#),但必须允许使用指针,原因有两个:具有所有需要的功能,并且 C++ 被承诺与 C 具有可比性(C 编译 C++ 编译的所有东西)

    【讨论】:

    • C# 中的引用(以及其他语言中的类似内容)看起来类似于 C++ 引用,但它们实际上完全不同。其中有多少是由于执行模型中的其他差异造成的尚待讨论,但无论如何我怀疑这是一个有用的类比。
    • 我同意 C++ 和 C# 中的引用在实现和概念上有所不同,但我相信最初的意图是相同的,就像在 C++ 中它们具有阻止它们达到相同目标的约束一样。
    猜你喜欢
    • 2017-05-22
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2013-06-24
    相关资源
    最近更新 更多