3 if条件中的逗号操作符

  • 本文关键字:操作符 if 条件 c++
  • 更新时间 :
  • 英文 :


在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

  1. 内置逗号操作符(与加法相反,例如)在其参数之间声明一个序列点,并从左到右对它们进行计算。该操作数的结合性也是从左到右的。
  2. 内置逗号操作符的返回值为最右操作数(与decltype(auto)返回值相同)。这意味着在表达式if (x--,--x,x)中,变量x在作为最后一个参数(根据1)计算之前被精确地递减两次,并在计算后作为内置逗号操作符的最右操作数返回(根据2)。因此,如果初始值为2,则表达式的计算结果为0(==false)。

最新更新