Mag*_*zne 3 c c++ ternary-operator comma-operator
int a,b;
a = 1 ? 1,2 : 3,4; // a = 2
b = 0 ? 1,2 : 3,4; // b = 3
Run Code Online (Sandbox Code Playgroud)
逗号运算符总是返回逗号的右侧,但是如果我们对变量赋值,则返回左侧,除非我们使用().那么第一个表达式如何赋予2.
我认为它是a = 1,2所以它应该是1但实际上a = 2.
为什么?
由于运算符优先级(逗号运算符的优先级最低),您的代码实际上看起来像
int a,b;
(a = 1 ? (1,2) : 3),4; // a = 2
(b = 0 ? (1,2) : 3),4; // b = 3
Run Code Online (Sandbox Code Playgroud)
因此,根据三元条件规则,引用C11,章节§6.5.15
第一个操作数被评估; 在其评估与第二或第三操作数的评估之间存在一个序列点(以评估者为准).仅当第一个操作数不等于0时才评估第二个操作数; 仅当第一个操作数比较等于0时才评估第三个操作数; 结果是第二个或第三个操作数的值(无论哪个被评估),转换为下面描述的类型.110)
[...]
110)条件表达式不产生左值.