C++ 使用逻辑运算符而不使用任何条件语句或捕获变量

C++ 使用逻辑运算符而不使用任何条件语句或捕获变量,c++,output,logical-operators,sequence-points,C++,Output,Logical Operators,Sequence Points,我在一些代码库中看到了一种“诗意的”代码。虽然它看起来很直截了当,但我只是想确认一下,它的方向是否正确。 以非常简单的形式: bool foo (); bool bar (); int main () { foo() or bar(); // <--- line } 我知道调用所有语句的,运算符,但不确定或(相当于|)运算符。 在g++中测试时,它给出。如果第一个条件为真,则另一个条件不再被计算(在|的情况下),因此正如您所说的: if(foo() == false)

我在一些代码库中看到了一种“诗意的”代码。虽然它看起来很直截了当,但我只是想确认一下,它的方向是否正确。
以非常简单的形式:

bool foo ();  
bool bar ();  

int main () {
  foo() or bar();  // <--- line
}
我知道调用所有语句的
运算符,但不确定
(相当于
|
)运算符。

在g++中测试时,它给出。

如果第一个条件为
,则另一个条件不再被计算(在
|
的情况下),因此正如您所说的

if(foo() == false)
  bar();

同样的情况也适用于
&
,如果第一个条件为
false,则第二个条件将不再计算。

是的,
运算符是
|
的文本等价物


所以你说的是。

在这首诗中加入一些三角图,这让这首诗非常痛苦,顺便说一下=p。不管怎样,你的问题是关于多部分布尔短路评估,是的,
exp1 | | exp2
几乎是一样的。唯一缺少的是未使用的
exp2
结果,在这两种情况下,结果都会被抛出(如果首先达到,则仅在
exp1中发生,这是零等效)。很抱歉@iammilind,但这是一个重复。下次请确保您在谷歌上搜索“C++操作符”或类似内容。可能重复@H2CO3,我知道短路评估。但我担心的是价值的接受,而这在这里并没有发生。不确定它们是否重复。如果第二个条件对于&&为false,该怎么办。在&,如果第一个条件为false,则不计算第二个条件。抱歉,这是一个输入错误。。我是说第一个是假的。正确答案
if(foo() == false)
  bar();