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

时间:2012-02-07 03:38:55

标签: c++ c macros constants unsigned

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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