在C和c++编程语言中,逗号操作符是一个二元操作符,它计算第一个操作数并放弃结果,然后计算第二个操作数并返回该值(和类型)。但是在下面的代码
中#include<iostream>
using namespace std;
int main(){
int x =2;
if( x--, --x, x){
cout<<"First";
}else{
cout<<"Second";
}
return 0;
}
输出为'Second'为什么? ?请帮助
当您到达x--, --x, x
中的第三个元素时,x
为零,因此应用else
分支。
注意,
是一个排序点-所以这里没有未定义的行为。你的代码相当于更明显的
int x = 2;
x--;
--x;
if (x){
让我们看一个简单的用例,
#include<stdio.h>
int main(){
int x =2;
if( 1, 1, 0){
printf("in if");
}else{
printf("in else");
}
return 0;
}
As逗号只考虑最后一个值。所以它会输出"in else"这里。
但在
#include<stdio.h>
int main(){
int x =2;
if( 0, 0, 1){
printf("in if");
}else{
printf("in else");
}
return 0;
}
这里它将打印if
- 内置逗号操作符(与加法相反,例如)在其参数之间声明一个序列点,并从左到右对它们进行计算。该操作数的结合性也是从左到右的。
- 内置逗号操作符的返回值为最右操作数(与
decltype(auto)
返回值相同)。这意味着在表达式if (x--,--x,x)
中,变量x
在作为最后一个参数(根据1)计算之前被精确地递减两次,并在计算后作为内置逗号操作符的最右操作数返回(根据2)。因此,如果初始值为2
,则表达式的计算结果为0
(==false
)。