c++ - 是否有必要在模板函数中转换文字常量?

标签 c++ templates

我正在编写必须以单精度和 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 的代码,然后让编译器应用它的隐式转换。由于转换通常只会转到更大的类型,因此它应该适用于 doublefloat 而不会为 float 带来任何开销。

关于c++ - 是否有必要在模板函数中转换文字常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49571653/

相关文章:

c++随机列表元素不被循环删除

c++ - 模板类默认类型和条件

c++ - 初始化模板对象

c++ - 嵌套模板列表错误

c++ - 限制模板函数,只允许某些类型

带有参数的c++虚函数在未使用时收到警告

c++ - NVI 和去虚拟化

c++ - 将 OpenGL VBO 与自定义类/数据结构一起使用

c++ - clang 不编译我的代码,但 g++ 可以

c++ - 调用模板函数和非模板函数时的优先级是什么?