【发布时间】:2016-05-31 12:38:56
【问题描述】:
我可以将常量定义为浮点数或 32 位 uint:
const float SecondsPerMinute = 60.0F;
或
const uint32 SecondsPerMinute = 60U;
const 用于一些需要整数的方程和一些需要浮点数的方程。我想让我的编译器和静态分析工具满意,所以我会根据需要将其静态转换为适当的类型。
将 const 定义为 float 并转换为 int 更好,还是将其定义为 int 并转换为 float 更好?有什么不同吗,还是这更多的是个人意见?
假设常量与 int 和 float 的使用次数相同。
【问题讨论】:
-
如果您需要添加无用的转换来将 60u 转换为 60f,您的静态分析工具将无济于事。
-
如果您将其定义为浮点数,那么在每个需要整数的方程中,您将其转换为整数,反之亦然。那么,为什么不定义两个常量,一个用于 int,另一个用于 float,并根据需要使用它们呢?如果不比任何其他替代方案更好,这肯定会提供相同的性能。唯一的缺点是您的代码大小会增加。
-
在任一方向的转换中都不会丢失信息(两种表示都是准确的)。并且在任何一个方向都不需要演员表。所以根本无所谓。
-
我同意在这种简单的情况下,静态分析工具可能会造成不必要的复杂化,但它们的目的是揭示可能导致意外行为的情况。在 int 与 float 的情况下,当预期为 int 时,您可能会通过使用 float 合法地失去精度。只是说... :)
-
当然:但是如果值是一个常量 - 并且一个可以精确表示为 int 或 float 的常量 - 那么没有警告是合理的。
标签: c++ constants static-cast