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

时间:2017-02-17 11:08:59

标签: c++ if-statement shared-ptr short-circuiting

使用共享指针时,我对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_可能由于某种原因而被追加并且未初始化,我冒着使应用程序崩溃的风险。

当我运行这个应用程序时似乎工作正常,但我只想与某人确认,以避免在发布中出现令人讨厌的意外。

1 个答案:

答案 0 :(得分:3)

  

你知道在这种情况下C ++是否始终保证myclass_ptr_是   在myclass_ptr_->canUse()之前评估?

是。此案例不属于&&的{​​{3}}但order of evaluation规则。

short circuiting的脚注开始。

  

内置运营商&amp;&amp;和||进行短路评估(做   如果结果在之后已知,则不评估第二个操作数   评估第一个),但重载的运算符表现得像常规   函数调用并始终评估两个操作数

另请阅读this page