【发布时间】:2012-04-03 13:02:51
【问题描述】:
所以C 中三元运算符的运算符优先级对我来说真的很奇怪。举个例子:
#include <stdio.h>
int main ()
{
int i=5;
int j=6;
int k=7;
printf("A: %d\n", i+j+(k!=7)?1:11); //prints 1
printf("B: %d\n", i+j+((k!=7)?1:11)); //prints 22
return 0;
}
这似乎类似于这里的问题:
C++ ternary conditional and assignment operator precedence
Ternary operator evaluation order
作为澄清,我知道括号使它起作用,正如我在原始帖子中指出的那样...
我只是想知道为什么语言作者会选择一种可能会欺骗人们的评估方法,而第一个语句似乎可以被编译器格式化为有效。
但这些问题涉及左侧或类成员内部的运算符,因为这种奇怪的行为发生在 RHS 上。
【问题讨论】:
-
这个故事的寓意:使用括号。
-
是的,发现这很困难,只是想知道为什么。 :) 对我来说,如果编译器看到
?为什么它不能在它之前使用任何东西,在()中使用更复杂的语句,或者在最简单的情况下是没有括号的单个语句......这似乎会让更有意义... -
Jason,大家都知道电脑是疯狂科学家在实验室里制造出来的,所以当然没有意义!
-
哈哈,我猜...希望这篇文章可以为某人省去一些麻烦。我犯了在大代码中尝试三元运算符的错误,它真的让我很头疼,试图找出我为什么会出现疯狂的段错误。 :) 嗯,一切都好,结局好!
标签: c conditional ternary-operator ternary operator-precedence