奇怪的条件语法

时间:2013-03-12 11:39:25

标签: c++ syntax for-loop conditional-statements

我遇到了一个非常不寻常的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

所以,我想知道为什么代码首先编译。现在我看到这个bug是一种合法的(虽然没用)语法。

谢谢!

3 个答案:

答案 0 :(得分:7)

这是comma operator。它评估表达式的两侧,并返回正确的表达式。

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

另见

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

c ++中的

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

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