为了在处理 const-overload 时避免代码重复,我写了这样的东西:
#include <memory>
class A
{
std::shared_ptr<int> _data;
public:
const A lightCopy() const
{
A a;
a._data = _data;
return a;
}
A lightCopy()
{
using const_a_t = const A;
const_a_t &const_me = *this;
return const_me.lightCopy(); // const object here
}
};
int main()
{
A a;
auto b = a.lightCopy();
}
const_cast
在非常量版本中使用,因为否则它将是 const 方法中的非常量函数调用,可能会修改对象并且会在不被注意的情况下逃脱(因为const_cast
)。并且从非 const 到 const 的 const 转换不应该引起任何问题。
这里的问题是:因为我不能 const_cast 一个对象 -是否有可能因为调用lightCopy()
返回 const 对象而实际返回类型不是 const - RVO 将不可能并且会制作额外的副本?