有什么理由不将参数作为a const &而不是值发送,当它不会被更改并且不会复制时?我的理解是,constby value参数与没有const(并且不会相互重载)相同,因此它仍然会被复制.
我知道最好发送大型对象const &,但我不知道这条线的位置.或者,如果即使是很小的参数应该由值被发送,如果他们将不会改变或复制.
注意::我试图搜索这个,但主题相当模糊,所以我没有找到任何好的答案,我道歉,如果已经回答了这个问题(发现许多问题关于何时使用const何时使用const &但不是关于价值vs的优点const &对于不明显大的物体).
Ker*_* SB 24
将只读参数作为const引用传递通常没有错,对于任何类型的重量级类来说,这肯定是最有效的方法.
您可能想要考虑通过复制传递基本类型,因为这使得引用实际上可能比仅仅复制产生更多的成本(例如,复制只适合一个寄存器,而引用可能用指针实现,等等).
此外,您可以std::shared_ptr通过值传递和迭代器,它们是为此而制作的.
至于传递const值,这是一个实现细节.像这样使用它:
// Declaration:
int foo(int n, double d); // No "const"! Constness is not part of the interface.
// Definition
int foo(int n, const double d) // implementation detail
{
while (n--) { if (d > n) return n; }
}
Run Code Online (Sandbox Code Playgroud)
在实现中,您可能会也可能不会选择直接使用参数变量并对其进行修改(如n),或者您可以选择将它们视为只读(如d),并适当地声明参数.
Fer*_*yer 14
根据经验,您应该传递基本类型,例如指针,int(bool)float,double(非常量)值,对象类型(如std::string)std::vector和(const)引用的自定义类.作为此规则的一个例外,有一些轻量级类专门设计为按值传递,例如智能指针.
通过const值传递一个值,例如void foo(const double bar)没有意义 - 为什么不foo应该允许修改它的副本bar?将参数声明为const在此处没有用处.
通过引用传递基元也没什么意义.在幕后,当通过引用传递参数时,指针按值传递.复制指针通常与复制基本类型(例如int)一样昂贵,并且const int&对于大多数C++程序员来说,类型的参数看起来很奇怪.
| 归档时间: |
|
| 查看次数: |
8735 次 |
| 最近记录: |