Pet*_*mit 84 c++ for-loop comma-operator
我想在for-loop条件中增加两个变量而不是一个.
所以类似于:
for (int i = 0; i != 5; ++i and ++j)
do_something(i, j);
Run Code Online (Sandbox Code Playgroud)
这是什么语法?
Pau*_*xon 143
一个常见的习惯用法是使用逗号运算符来计算两个操作数,并返回第二个操作数.从而:
for(int i = 0; i != 5; ++i,++j)
do_something(i,j);
Run Code Online (Sandbox Code Playgroud)
现在写了这篇文章,一位评论者认为它在for语句中实际上是一些特殊的语法糖,而不是逗号运算符.我在GCC检查了如下:
int i=0;
int a=5;
int x=0;
for(i; i<5; x=i++,a++){
printf("i=%d a=%d x=%d\n",i,a,x);
}
Run Code Online (Sandbox Code Playgroud)
我期待x拿起a的原始值,所以它应该显示为5,6,7 ..对于x.我得到的是这个
i=0 a=5 x=0
i=1 a=6 x=0
i=2 a=7 x=1
i=3 a=8 x=2
i=4 a=9 x=3
Run Code Online (Sandbox Code Playgroud)
但是,如果我将表达式放在括号中以强制解析器真正看到逗号运算符,我就会得到它
int main(){
int i=0;
int a=5;
int x=0;
for(i=0; i<5; x=(i++,a++)){
printf("i=%d a=%d x=%d\n",i,a,x);
}
}
i=0 a=5 x=0
i=1 a=6 x=5
i=2 a=7 x=6
i=3 a=8 x=7
i=4 a=9 x=8
Run Code Online (Sandbox Code Playgroud)
最初我认为这表明它根本不像一个逗号运算符,但事实证明,这只是一个优先问题 - 逗号运算符具有最低可能的优先级,因此表达式x = i ++,a ++是有效的解析为(x = i ++),a ++
感谢所有的评论,这是一个有趣的学习经历,我已经使用C多年了!
yey*_*man 54
试试这个
for(int i = 0; i != 5; ++i, ++j)
do_something(i,j);
Run Code Online (Sandbox Code Playgroud)
尽量不要这样做!
来自http://www.research.att.com/~bs/JSF-AV-rules.pdf:
AV规则199
除了将单个循环参数更改为循环的下一个值之外,for循环中的增量表达式将不执行任何操作.理由:可读性.