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-method での非 const 関数呼び出しになり、おそらくオブジェクトが変更され、気付かれずに回避されるためです ( const_cast
. また、非 const から const への const キャストは問題を引き起こさないはずです。
そして、ここでの質問は次のとおりです。オブジェクトを const_cast できないため、呼び出されたlightCopy()
オブジェクトが const オブジェクトを返し、実際の戻り値の型が const ではないため、RVO は不可能であり、追加のコピーが作成される可能性はありますか?