C++:作为条件语句的逻辑比较?

Ann*_*inn 5 c++ obfuscation

浏览一些使用它的代码,这让我想知道.

if(condition) foo = bar();

condition && (foo = bar());
Run Code Online (Sandbox Code Playgroud)

这两段代码是否等于编译器?如果没有,它们会以什么方式不同?

Xio*_*ion 6

由于运营商的优势,后者被解释为:

(condition && foo) = bar();
Run Code Online (Sandbox Code Playgroud)

此外,存在&&过载的可能性,这可能导致几乎任何事情.

简而言之:它们根本不相同 - 至少在一般情况下如此.


sha*_*oth 1

除非&&对类型的组合进行重载condition,否则foo它们将具有相同的行为 - 后者将以这种方式工作:

bool result;
if( !condition ) {
     result = false;
} else {
     foo = bar();
     result = foo != 0;
}
and result gets ignored
Run Code Online (Sandbox Code Playgroud)

这是通常的短路 - 如果 的第一个组件&&false第二个组件则不进行评估。

IMO 第二种变体的可读性要差得多。