我对直接赋值和三元条件运算符优先级感到困惑:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
1 0
1 0
Run Code Online (Sandbox Code Playgroud)
但它碰巧是:
1 0
0 0
Run Code Online (Sandbox Code Playgroud)
另外我得到这个警告:
main.cpp:20:warning:语句无效
这是我评论的第二行.
由于直接赋值运算符的优先级低于三元条件运算符,因此我期望将第一行和第二行注释为等效的行.但实际情况并非如此.
我用g ++ --version(Ubuntu 4.4.3-4ubuntu5)4.4.3尝试了这个