我有以下功能:
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
被截断为1
和1 + 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。