请考虑以下代码段:
int a, b, c;
a = (b = 3, c = 4, 5, 6);
事实证明,在执行这些行之后,b的值为3,c的值为4.到目前为止没有任何意外。但是a有价值6.为什么会这样?
此外,这有用吗?
答案 0 :(得分:6)
因为,
运算符会丢弃左边的所有操作数,并且因为6
是最右边的操作数,所以它是唯一不被丢弃的操作数。
这是来自§6.5.17 n1570草案
逗号运算符的左操作数被计算为void表达式;有一个 其评估与右操作数之间的序列点。然后是正确的 操作数被评估;结果有其类型和价值。
- 醇>
示例如语法所示,逗号运算符(如本子条款所述)不能 出现在上下文中,使用逗号分隔列表中的项(例如函数或列表的参数) 初始化者)。另一方面,它可以在带括号的表达式中使用,也可以在第二个表达式中使用 在这种情况下表达条件运算符。在函数调用
中f(a, (t=3, t+2), c)
该函数有三个参数,第二个参数的值为5.
您可以阅读更多here
答案 1 :(得分:0)
每当在赋值语句中使用分隔符(即',')时,它都会分配一个最后一个值。例如
int i =(2,3);
// i = 3;
变量我得到3的值而不是2。