以下面的求和模板函数为例:
template <typename T>
T Sum(std::vector<T>& source)
{
T v;
for (auto it = source.begin(); it != source.end(); ++it)
{
v += *it;
}
return v;
}
这适用于定义+=
运算符的自定义类型,但我怎样才能使其适用于基本类型,例如float
?
行T v;
将产生未初始化的值。
使用T v = 0;
适用于float
,但不适用于非基元。
答案 0 :(得分:5)
刚刚初始化v
。
T v = T();
或在C ++ 11中
T v{};
答案 1 :(得分:3)
你可以初始化而不是默认初始化:
T v{};
这将调用类类型的默认构造函数,并对内置类型进行零初始化。