2016-05-31 42 views
4

我可以定义一个常数,可以是浮子或32位单元:Cast漂浮到int或int来浮动?

const float SecondsPerMinute = 60.0F; 

const uint32 SecondsPerMinute = 60U; 

的const是在一些方程意想不到一个int使用,其中一些方程该期望浮动。我想让我的编译器和静态分析工具很高兴,所以我会根据需要static_cast它到适当的类型。

将const定义为float并将其转换为int或将其定义为int并将其转换为float值会更好吗?它是否有所作为,或者这更多是个人意见的问题?

让我们假设这个常量被用作int和float的次数相等。

+3

如果需要无用的强制类型转换60U添加到60F,您的静态分析工具没有帮助。 –

+5

如果你将它定义为float,那么在每个需要int的方程中,你将把它转换为int,反之亦然。那么为什么你不定义两个常量,一个是int,另一个是float,然后根据需要使用它们?如果不比其他选择更好,这肯定会有相同的表现。唯一的缺点是你的代码大小会增加。 – Nishant

+0

在任一方向的转换中都没有信息丢失(两种表示都是确切的)。任何方向都不需要施放。所以它根本就没有关系。 –

回答

11

如何模板:

template <typename T> 
constexpr T SecondsPerMinute = T(60); 

用法:

std::printf("%d %f", SecondsPerMinute<int>, SecondsPerMinute<double>); 
+0

[Demo](http://ideone.com/QQhX7u) –

+0

这太好了。我花了最后10分钟试图做同样的事情,最后我得到了超过10行不工作的代码..谢谢! –

+1

我认为这是一个很好的解决方案,可以扩展到很多类似的场景。谢谢! –