Mad*_*adu 6 c++ pass-by-const-reference
有些正文可以告诉我为什么我们通常将const和&与一些在构造函数中传递的对象作为例子.
Book::Book(const Date &date);
Run Code Online (Sandbox Code Playgroud)
我在这里的困惑是通常&符号在某个函数中使用,因为值是通过引用传递的,并且函数中该变量发生的任何变化都应该在之后反映出来.但另一方面,const表示不能对该变量进行任何分配.
如果某个机构对此有一些好主意,请告诉我原因.
这样做是为了避免不必要的复制.例如,以下代码:
Book::Book(Date date):
date_(date)
{
}
Run Code Online (Sandbox Code Playgroud)
当你调用这个构造函数时,它会复制date两次,一次是在你调用构造函数时,一次是复制到你的成员变量中.
如果你这样做:
Book::Book(const Date &date):
date_(date)
{
}
Run Code Online (Sandbox Code Playgroud)
date只复制一次.它本质上只是一种优化.
最常见的替代方法是传递价值:
Book::Book(Date date);
Run Code Online (Sandbox Code Playgroud)
传递const引用可以防止在传递的参数date已经复制时复制参数Date.复制对象可能是不必要的,执行起来可能很昂贵,或者可能导致切片对象(以及不正确的结果).
"切片"基本上是通过复制将对象的类型降级到其基础.对于多态类型,这实际上可以改变其行为,因为参数将被复制为其base(Date),然后对其多态接口的调用将会有所不同,因为实现已更改(例如,其虚拟方法将使用base的实现) .
| 归档时间: |
|
| 查看次数: |
4936 次 |
| 最近记录: |