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
为什么会这样?你能解释一下吗?
答案 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