Agn*_*ian 8 c++ floating-point templates
我有一个模板函数在浮点参数上运行.功能是模板化,使得呼叫者可以使用float,double或任何其他浮点数据类型.
在我的代码中的某一点,我将一个值与零(或任何其他浮点常数)进行比较.我应该使用0.0还是0.0f进行比较?
template<T> void f(T a){
// should I use 0.0 or 0.0f in the following line?
if(a == 0.0){
}
}
Run Code Online (Sandbox Code Playgroud)
虽然目前没有造成任何问题,但我想知道通常的做法是什么.
我建议简单0.根据数值类型的升级规则,0将升级为浮点操作数的类型a.提升常量是一个编译时转换,它根本不会减慢你的程序.
另一方面,using 0.0会强制将另一个操作数的运行时转换为double,这可能不是问题,因为操作数最有可能在FPU寄存器中传递. 0.0f不会导致浮点操作数的转换,但如果模板曾经使用过整数类型,那么你就可以将运行时转换为float.