Mic*_*gan 5 c for-loop comma-operator
int c = someIntegerValue;
// Some code...
int i;
for ( i = 0; i < 5, i < c; i++ ) {
...
}
Run Code Online (Sandbox Code Playgroud)
我的编译器说error: expression has no effect
,这听起来是正确的.那么,这两个比较中的哪一个将在这里使用?我的猜测是i < c
被忽略了,但我想得到其他人的一些确认,因为我还无法运行这段代码......
tem*_*def 14
该声明
i < 5, i < c
Run Code Online (Sandbox Code Playgroud)
使用逗号运算符,它从左到右计算所有表达式,但只生成最右边的表达式的值.这意味着表达式i < 5
被计算并被丢弃,而表达式i < c
被计算并被循环实际使用.
我假设作者打算写这样的东西:
i < 5 && i < c
Run Code Online (Sandbox Code Playgroud)
它实际上考虑了两个表达式.
也就是说,我不确定为什么这是编译器错误而不是编译器警告.这是合法的代码,虽然它几乎肯定是一个错误.也许您已将编译器设置为报告警告错误?
希望这可以帮助!
这是一个逗号运算符.它评估其左右操作数(始终按此顺序),并产生右操作数的结果.如果对左操作数的副作用进行评估,则使用它是有意义的; 由于i < 5
没有副作用,您的编译器会向您发出警告.
这i < 5
不是i < c
被忽略的.代码相当于:
for ( i = 0; i < c; i++ ) {
...
}
Run Code Online (Sandbox Code Playgroud)
很难猜出它的目的是什么.也许作者实际意味着:
for ( i = 0; i < 5 && i < c; i++ ) {
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
171 次 |
最近记录: |