使用函数模板进行浮点数字运算



我有以下功能:

template <typename T>
T foo (T x, T y){
double sum = 0;
sum = static_cast<double>(x) + static_cast<double>(y);
return sum;
}

该函数应该接收任意2个相同类型的数字,计算它们的和并将其作为相同类型返回,但当使用调用时

foo<char>(1.5, 1.5)

它返回2而不是3

char表示整数,因此1.5被截断为11 + 1 == 2

基于您将参数设为double的事实,可能最好也采用double:

template <typename T>
T foo (double x, double y){
return static_cast<T>(x + y); // static_cast to disable warnings
}

此外,实现边界检查也是值得的,否则您的代码可能包含UB。

最新更新