短路评估是否在C++中得到保证,就像在Java中一样?

Che*_*eng 26 c++ java

在Java中,我使用

if (a != null && a.fun());
Run Code Online (Sandbox Code Playgroud)

通过充分利用短路评估和表达从左到右进行评估?

在C++中,我可以这样做吗?它们是否保证可以跨不同平台和编译器移植?

if (a != 0 && a->fun());
Run Code Online (Sandbox Code Playgroud)

小智 38

是的,保证"内置"类型.但是,如果你重载&&或|| 对于您自己的类型,不执行短路评估.出于这个原因,重载这些运算符被认为是一件坏事.

  • 我并不是说禁止运营商超载是疯了.我说它因为这个原因而禁止它,这很容易被克服,而且远不如其他可能的原因那么重要.可以夸张地说,在C++中你不能相信任何东西 - 尽管如此,你必须对你的期望保持谨慎.Java程序员在C++中"无法预测"的大多数东西都不会在Java或C中编译.作业/转换是真正的尴尬.看到两个物体加在一起时,我从来没有分担过恐慌,但我很欣赏这并不是疯了. (6认同)
  • 疯狂是旁观者的眼睛.重载有一些非常明显的缺点,即你不能相信任何你想要的行为,这足以让我认为Java是正确的. (2认同)

Cra*_*rks 10

是.&&和|| C和C++中的短路; 它符合标准.

另请参阅:是否强制要求短路逻辑运算符?和评估顺序?