奇怪的条件语法
Bizarre condition syntax
我遇到了以下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++)
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- 在没有太多条件句的情况下,我如何避免被零除
- QMetaObject invokeMethod的基于函数指针的语法
- 基于多个条件处理地图中的所有元素
- 条件constexpr函数
- 无论条件是否为true,if总是在c++中执行
- 我可以使用条件运算符初始化C风格的字符串文字吗
- C++多个正则表达式条件语法
- OpenMP 条件并行化 - 并行部分中 if 子句的语法
- 条件中的指针语法
- 获取错误makefile:45:条件中的语法无效.停止
- C++条件语句(语法正确)
- 这个奇怪的条件运算符语法是什么
- 条件运算符语法
- 奇怪的条件语法
- while 循环条件中的语法是什么