2

我遇到了以下for循环,情况非常不寻常

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

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

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

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

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

谢谢!

4

3 回答 3

7

It is the comma operator. It evaluates both sides of the expression, and returns the right one.

So, expression (10, 20) does nothing, but returns '20'.

See also

于 2013-03-12T11:42:07.327 回答
3

(10, 20)表示计算整数 10,然后计算 20,然后返回 20(最右边)。所以它只是意味着20。

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

于 2013-03-12T11:42:10.913 回答
0

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

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

于 2013-03-12T11:45:02.643 回答