【问题标题】:Yoda Conditions and integer promotion尤达条件和整数促销
【发布时间】:2010-09-21 06:57:14
【问题描述】:

当比较一个大于int的类型和一个整数常量时,我​​应该把常量放在左边还是右边,以确保执行正确的比较?

int64_t i = some_val;
if (i == -1)

或者应该是:

if (-1 == i)

是否存在与-1LL比较不同的情况(其中int64_tlong long)?

【问题讨论】:

  • 尤达是一个很棒的标签:-)

标签: c integer-promotion


【解决方案1】:

不管你放在右手边还是左手边; == 运算符是完全对称的。

如果== 运算符的两个操作数都具有算术类型,如本例所示,则应用“通常的算术转换”(C99 §6.5.9)。在这种情况下,适用的规则是:

如果两个操作数都具有有符号整数类型或都具有无符号 整数类型,具有较小整数转换等级类型的操作数是 转换为具有更高等级的操作数的类型。 (C99 §6.3.1.8)

所以 -1 被转换为 int64_t-1LL 没有区别。

【讨论】:

  • 太棒了,正是我想知道的。
  • 除了答案之外:将常量放在首位的通常原因是为了帮助捕捉拼写错误:如果您将== 错误输入为=,那么编译器会抱怨您无法分配为常数。反之亦然(右手边的常数),编译器的投诉是不保证的。
猜你喜欢
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多