复制构造函数,constness和rvalues

时间:2014-07-18 08:48:04

标签: c++ const

我目前正在学习移动/复制构造函数,constness和rvalues。

"旧文学"关于C ++说:

  

"复制构造函数必须采用const参数,因为它应该能够获取不可修改的临时值/ rvalues"

但是现在,使用C ++ 11的移动构造函数,我们可以直接处理rvalues。这让我得出结论,不再强制要求复制构造函数采用const引用。

这是真的吗? (我既不能用现有的文献和社区文章来证实也不能伪造这个陈述。)关于拥有复制构​​造函数const的pro和contras的简短讨论也将受到赞赏。

1 个答案:

答案 0 :(得分:6)

不,这不是真的。您希望复制构造函数使用const T&和移动构造函数来获取T&&。为什么?好好想想如果我们传递const rvalue会发生什么。它无法绑定到T&&,因为它不是const。但是,它可以绑定到const T&,它能够绑定到任何东西。如果它仅仅是T&,则无法实现,而且我们永远无法从const rvalues进行复制。

以另一种方式思考它:移动构造函数唯一有用的是,如果我们有一个rvalue(可能是一个临时对象),我们可以从中窃取,这意味着它必须是非const 。所有其他情况都必须调用复制构造函数。唯一将绑定到其他所有内容的引用类型是const左值引用。