尤达条件和整数推广

Mat*_*ner 13 c integer-promotion

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

int64_t i = some_val;
if (i == -1)
Run Code Online (Sandbox Code Playgroud)

或应该是:

if (-1 == i)
Run Code Online (Sandbox Code Playgroud)

是否有在其中任一种情况下是不相同的与比较任何情况下-1LL(其中,int64_tlong long)?

caf*_*caf 11

无论你把它放在右手边还是左手边都没关系; 的==操作者是完全对称的.

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

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

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

  • 除了答案之外:将常量放在第一位的通常原因是为了帮助捕获拼写错误:如果你将`==`错误输入为`=`,那么编译器会抱怨你不能分配常量.另一种方式(在右侧不变),编译器的投诉无法保证. (15认同)