这在C++中是如何工作的?

3
我遇到了这样的情况:
if(true,false)
{
    cout<<"A";
}
else
{
    cout<<"B";
}

实际上它输出的是B。这个语句是如何工作的?根据我的观察,总是最后一个值起作用。但是这样做的意义是什么呢?

谢谢。


2
这是逗号运算符 - Shafik Yaghmour
1
请参阅逗号运算符 - juanchopanza
2
谁写的这段代码应该被禁止编写软件。 - SomeWittyUsername
1
@icepack:或者因编写出精简而出色的测试用例而受到赞扬。 - Lightness Races in Orbit
https://stackoverflow.com/search?q=comma+operator - user1508519
4
各位,认真点。这 不值得六个赞 - user529758
3个回答

3

http://www.cplusplus.com/doc/tutorial/operators/获得

逗号运算符(,)用于分隔两个或多个表达式,这些表达式被包含在只期望一个表达式的位置上。当要对表达式集合进行求值时,只有最右边的表达式被考虑。

例如,以下代码:a = (b=3,b+2);

将首先向变量b分配值3,然后将b + 2分配给变量a。因此,在结束时,变量a将包含值5,而变量b将包含值3。

所以在这里

if(true,false)
{

}

评估为if(false)


2

逗号运算符将运行逗号左侧的任何内容,将其丢弃,然后运行运算符右侧的任何内容。 在这种情况下:

if (true, false)

这段代码中的 false 永远等同于 if (false),因此它永远不会运行 if 条件,并且总是运行 else 条件。

顺便提一下:永远不要编写这样的代码。它没有任何作用,只会使代码更加难以理解。


2
根据 http://www.cplusplus.com/doc/tutorial/operators/
逗号运算符(,)用于分隔两个或多个表达式,在只需要一个表达式的地方包含它们。当表达式集合必须被求值时,只有最右边的表达式会被考虑。
所以例如考虑以下内容:
int a, b;
a = (b=3, b+2);

“b”被设置为3,但等号运算符只关心第二部分,因此实际返回的值是“5”。至于有用性?那取决于具体情况 :)

2
这基本上与Sajad LFC的答案相同,不同之处在于它没有指出示例(带有a和b和其他东西)不是您自己的想法。此外,cplusplus.com不是标准。 - user529758
@H2CO3 当我在查找答案时,他显然已经回答了你的问题 :) 干杯。 - michael60612
1
@michael60612:我已经第一时间回答了,就像H2CO3提供的那样。 - Sajad Karuthedath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接