我目前正在学习移动/复制构造函数,constness和rvalues。
"旧文学"关于C ++说:
"复制构造函数必须采用const参数,因为它应该能够获取不可修改的临时值/ rvalues"
但是现在,使用C ++ 11的移动构造函数,我们可以直接处理rvalues。这让我得出结论,不再强制要求复制构造函数采用const引用。
这是真的吗? (我既不能用现有的文献和社区文章来证实也不能伪造这个陈述。)关于拥有复制构造函数const的pro和contras的简短讨论也将受到赞赏。
答案 0 :(得分:6)
不,这不是真的。您希望复制构造函数使用const T&
和移动构造函数来获取T&&
。为什么?好好想想如果我们传递const
rvalue会发生什么。它无法绑定到T&&
,因为它不是const
。但是,它可以绑定到const T&
,它能够绑定到任何东西。如果它仅仅是T&
,则无法实现,而且我们永远无法从const
rvalues进行复制。
以另一种方式思考它:移动构造函数唯一有用的是,如果我们有一个rvalue(可能是一个临时对象),我们可以从中窃取,这意味着它必须是非const
。所有其他情况都必须调用复制构造函数。唯一将绑定到其他所有内容的引用类型是const
左值引用。