通过引用而没有参考的对象

时间:2014-03-03 19:32:48

标签: c++

我想问一个让我困惑的简单问题。 例如,如果我在参数中写入没有参考&amp ;.但在第二种情况下,我使用了&对于矩形类型&amp ;,我很困惑为什么我们使用这个&什么时候我们可以没有这个&amp ;.这是必要的,为什么我们使用它。我的问题不是复制构造函数。

 rectangleType rectangleType::operator+
(const rectangleType rectangle)

案例2:

rectangleType rectangleType::operator+
(const rectangleType& rectangle)

3 个答案:

答案 0 :(得分:2)

按值传递rectangleType(或任何其他类型)之类的对象时,您将复制该对象。这意味着:

  • 调用者看不到函数对该对象所做的任何更改,因为更改是在副本上进行的,而不是原始对象。
  • 复制对象的行为会产生性能成本。
  • 某些类型甚至可能无法复制对象。

因此,无论何时通过引用:

  • 您希望该功能能够修改原始对象。
  • 您希望无需复制即可使代码运行得更快。
  • 您传递的对象没有公共副本构造函数。

需要该函数能够修改原始对象时,通过 const 引用。

对于用户定义的类型,这基本上归结为“尽可能通过引用传递。”

答案 1 :(得分:0)

如果答案是关于它的,你怎么能说你的问题不是关于复制的?

  1. 使用const引用没有复制,这对于非常大的对象来说至关重要
  2. 有些类明确地没有提供复制构造函数,这样你仍然可以传递它们。
  3. 总而言之:你得到的好处没有缺点。

答案 2 :(得分:0)

在第一种方法中,它将接收rectangleType的(完整)实例,该实例将使用复制构造函数创建,只是作为参数传递。

在第二种方法中,它将接收对已存在实例的引用;不会复制。