关于使用共享指针的评估顺序

about order of evaluation using shared pointers

本文关键字:评估 顺序 指针 于使用 共享      更新时间:2023-10-16

我对使用共享指针时在if-lause中的评估顺序有疑问。

假设我有以下

struct MyClass {
   bool canUse(){ return false; } // dummmy value
}
std::shared_ptr<MyClass> myclass_ptr_;
/// other code..
if(myclass_ptr_ && myclass_ptr_->canUse()) {
   // do something
}

您知道在这种情况下,C 是否总是保证在myclass_ptr_->canUse() 之前评估myclass_ptr_

如果情况并非总是如此,并且myclass_ptr_可能是由于某种原因而来的,并且不是初始化的,我肯定会遇到应用程序。

当我运行此应用程序时,它似乎可以正常工作,但是我只想与某人确认以避免发行中令人讨厌的惊喜。

您知道在这种情况下C 是否总是保证myclass_ptr_为 在myclass_ptr_->canUse()之前进行评估?

是。此案不属于评估顺序,而是&&的简短循环规则。

从此页面上的脚注。

内置运营商&amp;&amp;和||执行短路评估(DO 如果结果已知,则不评估第二操作数 评估第一个),但超载运营商的行为就像常规 函数调用,并始终评估两个操作数

还请阅读为什么当这些操作员被超载时没有电路。