我发现了很多关于此错误的讨论,但是到目前为止,我尝试过的任何事情都没有工作。
基本上,我正在使用动态数组创建一个Templater Vector类,但是当我尝试超载" "运算符时,它仅适用于2个附加组(v3 = v1 v2),当我尝试了3个加载项时(v4 =v1 v2 v3),它返回最后一个加起来(v3)。我发现这是因为当 运算符的函数被称为第二次时,第一个附加的指针具有值0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccced value。这意味着它可能会注重不再存在的事物。但是,我不知道应该如何从过载函数返回矢量对象。这是我尝试的,但是这些都不是:
//this works only for two addends
template <class T> Vector<T>& operator+(Vector<T>& v1, Vector<T>& v2)
{
Vector<T> v;
//calculations
return v;
};
//this causes above mentioned error
template <class T> Vector<T> operator+(Vector<T>& v1, Vector<T>& v2)
{
Vector<T> v;
//calculations
return v;
};
//this causes above mentioned error too
template <class T> Vector<T> operator+(Vector<T>& v1, Vector<T>& v2)
{
Vector<T>* v= new Vector<T>;
//calculations
return (*v);
};
任何想法如何返回向量对象,以便它也可以与3个附加组件一起使用?
您需要使用const
参考文献,以便它们可以绑定到临时性:
template <class T>
Vector<T> operator+(const Vector<T>& v1, const Vector<T>& v2)
{
Vector<T> tmp = v1;
tmp += v2;
return tmp;
}
如果您的类型有效地移动,则可以使用RVALUE参考oveloads来利用:
template <class T>
Vector<T> operator+(Vector<T>&& v1, Vector<T>&& v2)
{
Vector<T> tmp = std::move(v1);
tmp += v2;
return tmp;
}
显然,您不应返回引用或需要由呼叫者删除的内容。