【问题标题】:syntactical use of comma operator in C++C++中逗号运算符的语法使用
【发布时间】:2013-05-19 10:53:42
【问题描述】:

我正在浏览别人的代码,但我无法获得以下语法

c = x<0 ? x = -x,'L':'R';

if(x) x--,putchar(c);

按照语义,很明显,在第一个中,变量 c 被赋值为“L”或“R”。在第二个中,x-- 和 putchar() 都被执行。但是逗号操作符在这里的作用究竟是什么?

【问题讨论】:

  • 真的,写这段代码的人应该是 LARTed。阅读起来非常困难——即使您知道, 运算符的作用——并且与其他选项相比,它没有提供任何性能优势。

标签: c++ syntax comma comma-operator


【解决方案1】:

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

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

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

if( x < 0 ) {
    x = -x;
    c = 'L';
} else {
    c = 'R';
}

if(x) {
    x--;
    putchar(c);
}

【讨论】:

  • “在这种情况下,代码混淆。”到此为止,给+1,然后读完。
【解决方案2】:

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

  • 第一个表达式在一个语句中做了两件事。如果选择“L” 或“R”,如果选择“L”,也将 x 设置为负数。
  • 第二个表达式('if' 之后的部分)递减 x,然后 放一个字符。没有更多上下文,这句话的含义不清楚。

可以通过使用单独的语句而不是逗号运算符来提高两者的可读性。第一个尝试将if 语句硬塞到条件表达式中。但是第二个已经使用了if 语句,所以还不清楚为什么选择逗号运算符。

【讨论】:

  • 而且,在 C++ 中,逗号运算符可以重载(当然,与大多数其他运算符一样)——所以也要注意这种可能性。
  • @cdhowie 一些程序员应该被烧死
  • @Eric 我没有任何争论。
  • 在第一个表达式中,当我使用 ;(分号)代替 ,(逗号)时,编译器给了我一个错误。那么,使用逗号运算符是唯一的方法,我们可以在三元运算符中执行多个表达式吗??
  • IOW:它选择 'L' 或 'R' 并将 x 设置为绝对值。一个聪明的技巧,可能在宏或内联函数中有用,但除非注释很好,否则代码肯定不容易理解。
【解决方案3】:

逗号运算符在该上下文中的作用是允许使用条件运算符并将赋值作为表达式之一的评估的一部分。

在我看来,这只是一种可怕的风格。 if 语句可以更好地传达该代码的意图,并且几乎不会降低效率。

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 1970-01-01
    • 2017-07-11
    • 2010-12-16
    • 2020-09-25
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多