内部循环内,是否保证最后运行的最后一个逗号分隔的语句?
-
28-09-2019 - |
题
考虑以下(微不足道的)代码段:
while (i++, i <= 10) {
// some more code
}
在一般情况下,C ++允许以任何顺序评估逗号分隔的语句。在循环的情况下,我们至少(按规范)保证了最后一个陈述(用作循环的条件)的最后评估?
解决方案
在一般情况下,C ++允许以任何顺序评估逗号分隔的语句。
如果您指的是函数参数之间的逗号,那只是一个分离器。
在您的情况下,您正在使用 逗号操作员, ,这引入了一个序列,该序列确保了逗号左操作数的所有副作用在评估右侧的操作。
是的,它是明确的。
从ISO C ++ 98标准的第5.18/1节中:
一对由逗号分隔的表达式被评估为从左到右,左表达式的值被丢弃。 LVALUE-to-rvalue(4.1),阵列到二重奏(4.2)和功能对二重奏(4.3)标准转换未应用于左表达式。在评估正确表达式之前,进行了左表达式的所有副作用(1.9),除了临时(12.2)的破坏(12.2)。结果的类型和值是正确操作数的类型和值;结果是如果其正确的操作数为lvalue。
其他提示
是的。这 ,
操作员(除非超载!)引入了所谓的 序列 确实保证了从左到右执行的顺序。
上面的评论解释了这一点。滥用此方法的常见方法之一是
while(scanf("%d", &n), n){
// do something
}
这将读取整数,直到我们阅读零为止。
不隶属于 StackOverflow