以下に数値ベクトルテンプレートクラス(数値計算用のベクトル)があります。D=A+B+C
すべての変数がVector
オブジェクトである場所に記述できるようにしようとしています。A
、B
およびC
変更しないでください。私の考えはVector operator+(Vector&& B)
、(うまくいけば)RvalueVector
がから返されたB+C
後、後続のすべての追加がそのオブジェクトに格納されるように、つまり後続のすべての追加のRvalueのストレージを盗むように使用することです。これは、新しいオブジェクトの作成と必要なストレージを排除するためです。
私の問題は、呼び出された各関数からの出力ステートメントから、呼び出されないことがわかることVector operator+(Vector&& B)
です。foo(Vector& B)
オーバーロードされたダミー関数を持っていて、foo(Vector&& B)
を試してみるとfoo(A+B+C)
、2番目の関数が期待どおりに呼び出されるため、理由がわかりません。
長い質問で申し訳ありませんが、これが私の最初の質問であり、できるだけ明確にしたいと思います。
私が明らかに間違っていること、またはなぜこれを試みるべきではないのかについての提案をいただければ幸いです。
template <typename T>
class Vector
{
int n;
T* v;
Vector();
~Vector();
Vector(const Vector& B);
Vector(Vector&& B);
inline Vector operator+(const Vector& B) const;
inline Vector operator+(Vector&& B) const;
};
template <typename T>
Vector<T>::Vector(const Vector<T>& B)
{
...
}
template <typename T>
Vector<T>::Vector(Vector<T>&& B)
{
...
}
template <typename T>
Vector<T> Vector<T>::operator+(const Vector<T>& B) const
{
Vector<T> C;
...
return C;
}
template <typename T>
Vector<T> Vector<T>::operator+(Vector<T>&& B) const
{
...do stuff to B
return B;
}