次のコードの std::move が何か良いことをするのか、それとも完全に間違っているのかわかりませんか? このクラスObject
には、Move コンストラクターと Copy コンストラクターの両方が定義されています。
最初: 移動あり:
template<typename T> template <typename F>
const Object<T> Object<T>::operator*(const F& rhs) const
{
return std::move(Object(*this) *= rhs); // We end in move constructor
}
2番目: 移動なし:
template<typename T> template <typename F>
const Object<T> Object<T>::operator*(const F& rhs) const
{
return Object(*this) *= rhs; // We end in copy constructor
}
演算子は次の*=
ように定義されます。
template<typename T> template<typename F>
Object<T>& Object<T>::operator*=(const F& rhs)
{
for(int i = 0; i < dimension ; i++)
{
_inner[i] *= rhs;
}
return *this;
}
テストに使用するコードは次のとおりです。
Object<double> test(4);
Object<double> test2(test * 4);
std::cout << test2; // works fine
結果最初のケースではムーブ コンストラクターで終了し、2 番目 のケースではコピー コンストラクターで終了します。
どちらの場合でも、コードはコンパイルされます。
新しいオブジェクトをコピーするのではなく移動する方が速いと思うので、一方が他方よりも効率的ですか?
追加情報: 次のコンパイラを使用しています: g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3