我遇到了一个非常不寻常的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是一种合法的(虽然没用)语法。
谢谢!
答案 0 :(得分:7)
这是comma operator
。它评估表达式的两侧,并返回正确的表达式。
因此,表达式(10, 20)
什么都不做,但返回'20'。
另见
答案 1 :(得分:3)
(10, 20)
表示计算整数10,然后计算20,然后返回20(最右边)。所以它只意味着20。
逗号运算符在for
循环中通常很有用,因为它允许x = 0, y = 1
之类的东西(即一个表达式中的两个赋值),但这里它没用。
答案 2 :(得分:0)
,
运算符作为二元运算符工作,它检查第一个值,丢弃它并返回下一个值。简而言之。
for(int i=0;i<(10,20);i++)
将等于for(int i=0;i<20;i++)