我對使用共享指針的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_
可能由於某種原因而出現,並且未初始化,我冒着肯定會導致應用程序崩潰的風險。
當我運行這個應用程序似乎工作正常,但我只是想與某人確認,以避免發佈中的令人討厭的驚喜。
'&&'的左操作數總是首先被評估。如果「false」,則不評估右操作數。除非你使用'&&'用戶定義的超載' – WhiZTiM