gpt4 book ai didi

c++ - 如何在 C++ 'for' 循环中放置两个增量语句?

转载 作者:IT老高 更新时间:2023-10-28 12:03:03 30 4
gpt4 key购买 nike

我想在 for 循环条件中增加两个变量而不是一个。

比如:

for (int i = 0; i != 5; ++i and ++j) 
do_something(i, j);

这是什么语法?

最佳答案

一个常见的习惯用法是使用 comma operator它计算两个操作数,并返回第二个操作数。因此:

for(int i = 0; i != 5; ++i,++j) 
do_something(i,j);

但它真的是逗号吗?

写完之后,一位评论者建议它实际上是 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);
}

我希望 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

但是,如果我将表达式括起来以强制解析器真正看到逗号运算符,我会得到这个

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

最初我认为这表明它根本不像逗号运算符,但事实证明,这只是一个优先级问题 - 逗号运算符具有 lowest possible precedence ,所以表达式 x=i++,a++ 被有效地解析为 (x=i++),a++

感谢所有评论,这是一次有趣的学习经历,而且我已经使用 C 多年了!

关于c++ - 如何在 C++ 'for' 循环中放置两个增量语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232176/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com