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)
你被优先考虑了. ?:具有非常低的优先级,但不低于=或,(参见运算符优先级表).
您的代码被解析为:
(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分配给该变量.