我对使用共享指针时if子句中的求值顺序有疑问。

假设我有以下内容

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_myclass_ptr_->canUse() 之前进行评估?

如果不是总是这样,并且由于某种原因myclass_ptr_可能会出现并且没有初始化,那么我冒着一定使该应用程序崩溃的风险。

当我运行该应用程序时,它似乎运行正常,但我只想与某人确认,以免发布时令人讨厌。

最佳答案



是。这种情况不属于order of evaluation,但属于&&short circuiting规则。

this page的脚注开始。



另请阅读Why there is no circuiting when these operators are overloaded

关于c++ - 关于使用共享指针的评估顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42296411/

10-11 16:01