我对使用共享指针时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/