在C++中语法运用逗号运算符

vin*_*nit 1 c++ syntax comma comma-operator

我正在通过别人的代码,我无法获得以下语法

c = x<0 ? x = -x,'L':'R';
Run Code Online (Sandbox Code Playgroud)

if(x) x--,putchar(c);
Run Code Online (Sandbox Code Playgroud)

通过语义学,很明显,在第一个中,变量c被赋予"L"或"R".而在第二个中,x--和putchar()都被执行.但是逗号运算符的作用到底是什么?

And*_*mas 5

逗号运算符计算两个表达式,并返回最后一个的值.

  • 第一个表达式在一个语句中完成两件事.如果选择"L",则选择"L"或"R"并将x设置为负数.
  • 第二个表达式('if'之后的部分)递减x然后放置一个字符.没有更多的背景,这一点的含义尚不清楚.

通过使用单独的语句而不是逗号运算符,可以提高两者的可读性.第一个尝试将if语句变成条件表达式.但第二个已经使用了一个if声明,因此不清楚为什么选择逗号运算符.

  • 而且,在C++中,逗号运算符可以被重载(当然,与大多数其他运算符一样) - 所以也要注意这种可能性. (2认同)
  • @cdhowie一些程序员应该被焚烧 (2认同)

Dav*_*ave 5

但是这里逗号运算符的作用到底是什么?

在这种情况下,代码混淆.最初的开发人员可能认为他们很聪明.

逗号运算符允许您在单个语句中执行多个操作,但使用2个语句几乎总是更好.在这些情况下,它扩展到:

if( x < 0 ) {
    x = -x;
    c = 'L';
} else {
    c = 'R';
}
Run Code Online (Sandbox Code Playgroud)

if(x) {
    x--;
    putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

  • *"在这种情况下,代码混淆."*停在这里,给了+1,然后读完了. (3认同)