和Java中一样,是否可以保证C ++中的短路评估?

在Java中,我使用


if (a != null && a.fun());

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


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


if (a != 0 && a->fun());


慕勒3428872
浏览 486回答 3
3回答

墨色风雨

是的,对于“内置”类型可以保证。但是,如果您重载&&或|| 对于您自己的类型,不执行短路评估。因此,重载这些运算符被认为是不好的事情。

潇湘沐

是。&&和|| C和C ++中的短路;它是由标准保证的。

月关宝盒

我不是说这是疯狂的禁止操作符重载。我说这是疯狂的,禁止其出于这个原因,这既容易克服,并远高于其他合理原因不太显著。夸张地说,在C ++中,您不能信任任何东西-但是,您必须谨慎对待自己的期望。Java程序员在C ++中大多数“不可预测的”事情甚至根本不会在Java或C中进行编译。分配/转换是真正的尴尬。我从来没有对看到将两个对象添加到一起感到恐慌,但是我很欣赏它并不疯狂。
打开App,查看更多内容
随时随地看视频慕课网APP