我对直接赋值和三元条件运算符的优先级感到困惑:
#include<stdio.h>
int main(void)
{
int j, k;
j = k = 0;
(1 ? j : k) = 1; // first
printf("%d %d\n", j, k);
j = k = 0;
1 ? j : k = 1; // second
printf("%d %d\n", j, k);
return 0;
}
我希望输出结果为:
1 0
1 0
但是事实上是:
1 0
0 0
此外,我还收到了以下警告:
main.cpp:20: 警告:语句没有效果
这个警告是关于我在第二行注释的代码。
由于直接赋值运算符的优先级低于三目条件运算符,因此我原以为注释为第一行和第二行的代码等价。但不幸的是,情况并非如此。
我使用 g++ --version (Ubuntu 4.4.3-4ubuntu5) 4.4.3 尝试过这个问题。