У меня есть сомнение относительно порядка оценки в условии 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