我有下面的数字向量模板类(用于数值计算的向量)。我正在尝试编写D=A+B+C
所有变量都是Vector
对象的位置。A
,B
且C
不应修改。我的想法是使用Vector operator+(Vector&& B)
,以便在(希望)Vector
从返回RvalueB+C
之后,所有后续添加都存储在该对象中,即为所有后续添加窃取 Rvalue 的存储。这是为了消除新对象的创建和所需的存储。
我的问题是我可以从每个Vector operator+(Vector&& B)
从未调用过的函数的输出语句中看到。我不明白为什么,因为如果我有一个重载的虚拟函数foo(Vector& B)
和foo(Vector&& B)
try foo(A+B+C)
,那么第二个函数会完全按照我的希望调用。
很抱歉这个冗长的问题,但这是我在这里的第一个问题,我想尽可能清楚。
关于我明显做错了什么或为什么我不应该尝试这个的任何建议,将不胜感激。
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;
}