【问题标题】:Passing Constant Class as argument in function将常量类作为参数传递给函数
【发布时间】:2017-03-22 15:33:59
【问题描述】:

有什么区别

void A(const class1 a);

void A(const class1 &a);

在 C++ 中。

我无法区分这两者。

【问题讨论】:

  • 听起来你可以使用good C++ book
  • 寻求帮助而非建议
  • 一个声明中有一个&,另一个没有。这会产生非常很大的不同,任何初学者的书都会告诉你。
  • 您对此进行过研究吗?它告诉了你什么,你在哪里坚持它的结果?
  • 寻求帮助而不是寻求建议。真的吗?

标签: c++


【解决方案1】:

主要区别在于

A(const class1 a);

将在A 内创建a 的本地副本,这可能很昂贵(从内存和计算的角度来看)

A(const class1 &a);

不会创建副本。

因此传递参考(第二版)通常是首选方式。

【讨论】:

  • 第一种形式不一定更贵,如果它大于参考值,则取决于 class1 的大小,所以你说的是真的,否则不是。
  • @basslo:没错,这就是我写“可能很贵”的原因。然而,根据我的经验,复制一个类不太可能比复制一个引用更便宜(从内存消耗和计算的角度来看)。它不仅取决于类的大小,还主要取决于复制构造函数的作用。
  • 通常如果sizeof(type) <= sizeof(void*) 则通过引用或值传递无关紧要。
  • @NathanOliver:如果复制构造函数做了一些复杂的事情怎么办? (我并不是说复制构造函数应该这样做。)
  • @FrankPuffer 当然也有例外。几乎所有存储指针的东西都应该通过引用传递。
猜你喜欢
  • 2021-08-14
  • 2013-01-27
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
相关资源
最近更新 更多