复制构造函数,constness和rvalues

Mic*_*ael 1 c++ const

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

关于C++的"旧文献"说:

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

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

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

Jos*_*eld 6

不,这不是真的.您希望您的复制构造函数采用a const T&和您的移动构造函数来获取T&&.为什么?好好想想如果我们传递一个const右值会发生什么.它不能绑定T&&,因为它不是const.但是,它可以绑定到const T&能够绑定到任何东西的东西.如果它只是一个T&相反,它将无法,并且我们永远无法从constrvalues 复制.

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