出于教育目的,我正在使用自己的C++数字向量模板类.我希望能够为两个向量的点积写(v,w),因此重载operator,()如下:
template<class T>
const T Vector<T>::operator,(const Vector<T>& v) const
{
assertEqualSize(v);
T t;
for(size_t i=0; i<numElements; i++) {
t += elements[i] * v[i];
}
return t;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:如何正确初始化t一个合理的值(例如0.0为Vector<double>)?我试过T t();但g ++告诉我,例如,"double(*)()"在return语句中不能转换为"const double",并且operator+=()不会为"(double(),double)"定义.
非常感谢你!
您需要的是称为值初始化,它具有零初始化内置类型的效果:
T t{}; // C++11
T t = T(); // C++03 and C++11
Run Code Online (Sandbox Code Playgroud)
这不起作用的原因
T t();
Run Code Online (Sandbox Code Playgroud)
是一个无参数函数的声明,称为t,返回一个T.