C++:默认初始化模板函数中的整数类型

o.s*_*son 9 c++ templates

出于教育目的,我正在使用自己的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.0Vector<double>)?我试过T t();但g ++告诉我,例如,"double(*)()"在return语句中不能转换为"const double",并且operator+=()不会为"(double(),double)"定义.

非常感谢你!

jua*_*nza 9

您需要的是称为值初始化,它具有零初始化内置类型的效果:

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.