我正在编写必须以单精度和 double 编译的代码。原始版本只有 double ,但我现在正尝试通过使用模板启用单精度。
我的问题是:是否有必要投 1.
和 7.8
使用 static_cast<TF>(1.)
指定类型例如,还是编译器会处理它?我发现类型转换不是非常漂亮,并且更愿意远离它。 (我还有其他更长的函数,其中包含更多的文字常量)。
template<typename TF>
inline TF phih_stable(const TF zeta)
{
// Hogstrom, 1988
return 1. + 7.8*zeta;
}
最佳答案
强制转换和隐式转换是两件事。对于此示例,您可以将模板函数视为两个重载函数,但内部代码相同。在接口(interface)级别(参数、返回值),编译器将生成隐式转换。
现在,您必须问自己的问题是:这些隐式转换是否符合我的要求?如果他们这样做了,就让它保持原样。如果他们不这样做,您可以尝试添加显式转换(可以使用像 TF(1.)
这样的函数式转换)或者,您可以将此函数专门用于 double
和 float
。
另一个选项,不太通用但可能在这里工作,是你切换代码,即你编写单精度 float
的代码,然后让编译器应用它的隐式转换。由于转换通常只会转到更大的类型,因此它应该适用于 double
和 float
而不会为 float
带来任何开销。
关于c++ - 是否有必要在模板函数中转换文字常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49571653/