我最近遇到了这个编程习惯用法:
const float Zero = 0.0;
然后用于比较:
if (x > Zero) {..}
任何人都可以解释一下,这实际上是否比以下方法更有效,可读性或可维护性:
if (x > 0.0) {..}
注意:我可以想到定义此常量的其他原因,我只是想知道它在此上下文中的使用。
x
具有type float
,则x > 0.0
强制提升为double
,这可能效率较低。这不是使用一个命名常量虽然一个很好的理由,只为确保您的常数具有正确的类型(例如0f
,float(0)
或decltype(x)(0)
)。
13.37
是不是float
,它的double
。因此,如果您想要一个,float
那么可以想象您的导师是正确的。在某些情况下(例如,对浮点数的赋值)13.37
将隐式转换为float
所需的,而在其他情况下(例如,模板类型推导)则不会,而static const float
总是以您想要的类型开始。因此,更安全。提醒你,会的13.37f
!但是,还有其他避免使用宏的原因,而不是“类型安全性”,因此,导师给您一个糟糕的论证的可能性就很大。