条件运算符出现意外错误

nik*_*kel 1 c conditional-operator

下面的代码汇编得很好

int a=5,b=4,c;
a>b?30:40;
Run Code Online (Sandbox Code Playgroud)

也是,

int a=5,b=4,c;
a>b?c=30:40;
Run Code Online (Sandbox Code Playgroud)

但为什么这不起作用?

int a=5,b=4,c;
a>b?c=30:c=40;
Run Code Online (Sandbox Code Playgroud)

Joe*_*ams 7

你被优先考虑了. ?:具有非常低的优先级,但不低于=,(参见运算符优先级表).

您的代码被解析为:

(a>b ? c=30 : c) = 40;
Run Code Online (Sandbox Code Playgroud)

而不是:

a>b ? c=30 : (c=40);
Run Code Online (Sandbox Code Playgroud)

你不需要括号周围c=30,因为?:像括号内的表达.


信不信由你,(a>b ? c=30 : c) = 40是有效的C++(但不是有效的C).表达式(a>b ? c=30 : c)是引用变量的左值c,40分配给该变量.