奇怪的条件语法

Bizarre condition syntax

本文关键字:语法 条件      更新时间:2023-10-16

我遇到了以下for循环,它有一个非常不寻常的条件

int main( int argc, const char* argv[] ) {
    for ( int i = 0 ; i < ( 10, 20 ) ; i++ ) {
        cout << i << endl;
    }
}

源代码编译成功。它使用值为0到19的i执行循环(表达式(10, 20)中的10似乎对迭代次数没有影响)。


我的问题:这个条件语法是什么?为什么它不会导致编译错误?

编辑:


更大的图景:这个问题始于一个bug,最初的条件应该是i < std::min( <expr A>, <expr B> ),由于某种原因我省略了std::min

所以,我想知道为什么代码编译在第一位。现在我看到这个错误是一个合法的(尽管无用的)语法。

谢谢!

这是comma operator。它对表达式的两边求值,并返回正确的那个。

因此,表达式(10, 20)什么也不做,但返回'20'。

参见

  • C逗号操作符的使用。
  • http://en.wikipedia.org/wiki/Comma_operator

(10, 20)表示先求整数10,然后求20,然后返回20(最右边的)。所以它的意思是20。

逗号操作符在for循环中通常很有用,因为它允许x = 0, y = 1这样的事情(即在一个表达式中进行两次赋值),但在这里它是无用的。

,运算符在c++中作为二进制运算符,检查第一个值,丢弃它并返回下一个值。简而言之。

for(int i=0;i<(10,20);i++)将等于for(int i=0;i<20;i++)