if条件下的逗号运算符

时间:2013-05-10 04:06:59

标签: c++ c if-statement

int a = 1, b = 0;

if(a, b)
   printf("success\n");
else
   printf("fail\n");

if(b, a)
   printf("success\n");
else
   printf("fail");

这是一个cpp文件,我在Visual Studio 2010中得到了输出

fail
success

为什么会这样?你能解释一下吗?

2 个答案:

答案 0 :(得分:45)

http://en.wikipedia.org/wiki/Comma_operator

  

在C和C ++编程语言中,使用逗号运算符   (由标记,表示)是一个二进制运算符,用于计算它   第一个操作数并丢弃结果,然后计算第二个操作数   操作数并返回此值(和类型)。

在您的第一个if

if (a, b)

a首先被评估并被丢弃,b被评估为第二个并返回为0.所以这个条件是假的。

在你的第二个if

if (b, a)

b首先被评估并被丢弃,a被评估为第二个并返回为1.所以这个条件为真。

如果有两个以上的操作数,则返回最后一个表达式。

如果您希望两个条件都成立,则应使用&& operator

if (a && b)

答案 1 :(得分:1)

这是一个由维基百科提供的示例,其中显示了另一个用例:

逗号可以在一个条件(if,while,do while或for)中使用,以允许辅助计算,特别是调用函数并使用结果,使用块作用域:

if(y = f(x),y​​> x){     ... //涉及x和y的语句 }

// See this Wikipedia discussion

许多C程序员在for语句的初始化部分遇到了逗号, 但并没有像在if语句中看到的那样多。 在上面的例子中,它允许你在if语句测试条件y> x。

之前初始化y