浏览一些使用它的代码,这让我想知道.
if(condition) foo = bar();
condition && (foo = bar());
Run Code Online (Sandbox Code Playgroud)
这两段代码是否等于编译器?如果没有,它们会以什么方式不同?
由于运营商的优势,后者被解释为:
(condition && foo) = bar();
Run Code Online (Sandbox Code Playgroud)
此外,存在&&
过载的可能性,这可能导致几乎任何事情.
简而言之:它们根本不相同 - 至少在一般情况下如此.
除非&&
对类型的组合进行重载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 第二种变体的可读性要差得多。
归档时间: |
|
查看次数: |
177 次 |
最近记录: |