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

短路评估是否在C+中得到保证+;就像在Java中一样?,java,c++,Java,C++,在Java中,我使用 if (a != null && a.fun()); 通过充分利用短路计算和表达式从左到右进行计算 在C++中,我能做同样的事吗?它们是否保证可以跨不同的平台和编译器移植 if (a != 0 && a->fun()); 对以及C和C++中的短路;这是由标准保证的 另请参见:是的,对于“内置”类型,它是有保证的。但是,如果您为自己的类型重载&&或| |,则不会执行短路求值。因此,重载这些运算符被认为是一件坏事。自己尝试一下谷歌搜索一

在Java中,我使用

if (a != null && a.fun());
通过充分利用短路计算和表达式从左到右进行计算

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

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

对以及C和C++中的短路;这是由标准保证的


另请参见:

是的,对于“内置”类型,它是有保证的。但是,如果您为自己的类型重载&&或| |,则不会执行短路求值。因此,重载这些运算符被认为是一件坏事。

自己尝试一下谷歌搜索一下,我相信用你在问题中已有的关键字你会找到答案。谷歌搜索“c++短路”,你可能会发现许多直接回答你问题的结果。你可能会对这里85%的问题说同样的话。可能重复@dribea太糟糕了,你没有足够的先见之明意识到,到目前为止,谷歌搜索“c++短路”的“1”就是这个页面……我很高兴有人在下面写了一个真实的答案!我Google“C++Cult短路”,这个页面是第一次点击…这是我的知识,操作符重载的确切原因不是java。@ Thorbj·RN:可能是真的,但听起来很疯狂。java可以允许操作符重载,但不允许这两个操作符重载。(或者三元::运算符,C++也不过载)。我总是假设这是因为“看起来局部的代码应该是本地的”参数,任何调用用户定义代码的东西都应该是“看起来”。它使用显式方法调用进行了越轨调用。疯狂是旁观者的看法。重载有一些非常明显的缺点,即你不能相信任何东西会有你期望的行为,这足以让我认为Java做对了。我不是说禁止操作符重载是疯狂的。我是说禁止它是疯狂的因此,这是很容易克服的,而且远比其他合理的原因要重要得多。在C++中你不能相信任何东西,这是夸张的。不过,你必须谨慎地对待你所期望的事情。C++中的大多数事情都是“不可预知的”。Java程序员一开始甚至不会用Java或C进行编译。赋值/转换是真正棘手的问题。看到两个对象加在一起,我从来没有感到恐慌,但我明白这并不疯狂。