为什么返回0或者不能使用逗号运算符?

Nay*_*yem 41 c c++ comma comma-operator

我可以编写代码if(1) x++, y++;而不是if(1) {x++; y++;},但在某些情况下它不起作用(见下文).如果你告诉我这件事会很好.

int x = 5, y = 10;    
if (x == 5) x++, y++;  // It works

if (x == 5) x++, return 0; // It shows an error
Run Code Online (Sandbox Code Playgroud)

这同样适用于for循环:

for (int i = 0; i < 1; i++) y++, y += 5; // It works

for (int i = 0; i < 1; i++) y++, break; // Does not work
Run Code Online (Sandbox Code Playgroud)

Rak*_*111 60

那是因为return而且break是陈述,而不是表达.因此,您不能以任何方式在另一个表达式中使用它.if其他人同样也是陈述.

然而,你可以做的是重写你的表达式(for return),使它不嵌套在表达式中 - 不是我建议编写这样的代码:

return x++, 0;
Run Code Online (Sandbox Code Playgroud)

你不能这样做,break因为它不接受表达式.

  • 一个很好的例子:`x ++/7`和`x ++,7`之间没有明显的语法差异(`/`和`,`都是运算符).出于同样的原因,`x ++,break`和`x ++/break`一样有意义:没有. (31认同)
  • @SebastianRedl:还有一个事实是`,`返回第二个操作数,但是`/`除了东西,我说这是一个稍微更显着的差异:D.从语法上讲,唯一让它们与众不同的是优先级([简称这里](http://www.nongnu.org/hcb/#expression),[更现实](http://www.computing.surrey. ac.uk/research/dsrg/fog/CxxGrammar.y)). (5认同)
  • @Amadan有一个非常显着的区别(至少在C++ 17之前,不确定新规则):逗号运算符引发一个先发生过的关系(或旧的,引入一个序列点),这意味着`x ++ ,x ++`是定义的,而`x ++/x ++`是未定义的. (3认同)
  • 但是请不要这样做 (2认同)

Yun*_*sch 11

逗号运算符用于表达式.

return声明和其他纯陈述不是表达式.

  • @PeterMortensen我回答"为什么?" 问题,不是吗?你的观点是什么? (2认同)