在C / C ++中定义类型化常量数

在C / C ++中,说(1U)((unsigned int)1)之间有区别吗? 我更喜欢第二个,但我担心第二个可能在运行时进行类型转换(即额外的cpu周期),而第一个在编译时获得正确的类型。 谢谢。

他们不等同。 1U#if预处理指令中有效。 (unsigned int)1是预处理器级别的语法错误。 然而,你可以使它(unsigned)+1并且它在预处理器中是有效的,但仅仅是因为很少有人知道的模糊规则。

我认为你做得对。 (1U)我怀疑编译器的词法分析会将其识别为“unsigned”,而(unsigned int)1将是运行时操作。 正如评论所说的那样,无论如何都有可能为你优化。

作为一般规则,不要试图想出编译器。 做一些看起来最具可读性的内容,一旦明确出现问题就会担心性能优化。 我可以保证*这实际上永远不会给你带来麻烦。

*在以Y结尾的日子保证无效。

11个字符。 否则,它们是等价的。