这段代码是如何工作的

How does this piece of code work?

本文关键字:何工作 工作 代码 段代码      更新时间:2023-10-16

1.(

int i;
for(i=1;i<5,i<8;i++){
}
printf("%d",i);

2.(

int i;
for(i=1;i<18,i<6;i++){
}
printf("%d",i);

1.( 的输出。是 8,而对于 2.(为 6

我不明白代码是如何工作的,将不胜感激。

,运算符计算为其最后一个操作数。

i < 18, i < 66i变为假。

号运算符 ( , (

逗号运算符 (,( 用于分隔包含的两个或多个表达式,其中只有一个表达式。当必须为值计算表达式集时,仅考虑最右侧的表达式

因此:

for(i=1;i<5,i<8;i++)

相当于:

for(i=1;i<8;i++)

评估i8的值

for(i=1;i<18,i<6;i++)

相当于:

for(i=1;i<6;i++)

评估i6的值


斯坦德德斯参考资料:

C++11 标准 §5.18:

逗号运算符从左到右分组。

表达:
赋值表达式
表达式 , 赋值表达式

用逗号分隔的一对表达式从左到右计算;左表达式是丢弃值表达式(条款 5(83。与左侧表达式关联的每个值计算和副作用在与右侧表达式关联的每个值计算和副作用之前进行排序。结果的类型和值是右操作数的类型和值;结果与其右操作数属于相同的值类别,如果其右操作数是 glvalue 和位字段,则结果是位字段。