Fel*_*ung 12 c++ specifications language-specifications
考虑以下(普通)代码段:
while (i++, i <= 10) {
// some more code
}
Run Code Online (Sandbox Code Playgroud)
在一般情况下,C++允许以任何顺序计算逗号分隔的语句.在while循环的情况下,我们是否至少保证(通过规范)最后一个语句(用作循环的条件)?
jam*_*lin 16
在一般情况下,C++允许以任何顺序计算逗号分隔的语句.
如果你指的是函数参数之间的逗号,那只是一个分隔符.
在您的情况下,您正在使用逗号运算符,并引入了一个序列点,该序列点保证在评估正确的操作数之前,逗号左操作数的所有副作用都已确定.
所以,是的,它定义明确.
从ISO C++ 98标准的第5.18/1节开始:
由逗号分隔的一对表达式从左到右计算,并且左表达式的值被丢弃.左值(左值)至右值(4.1),数组到指针(4.2)和函数到指针(4.3)标准转换不应用于左表达式.除了对临时表的破坏(12.2)之外,左表达的所有副作用(1.9)在评估正确表达之前进行.结果的类型和值是右操作数的类型和值; 如果右操作数为,则结果为左值.
上面的评论已经解释了这一点。滥用这种方法的常见方式之一是
while(scanf("%d", &n), n){
// do something
}
Run Code Online (Sandbox Code Playgroud)
这将读取整数,直到我们读取零。