gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:54 24 4
gpt4 key购买 nike

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

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

最佳答案

Do you know if in that case C++ always guarantees that myclass_ptr_ is evaluated before myclass_ptr_->canUse() ?

是的。此案例不属于 order of evaluation但是short circuiting && 的规则。

来自脚注this page .

Builtin operators && and || perform short-circuit evaluation (do not evaluate the second operand if the result is known after evaluating the first), but overloaded operators behave like regular function calls and always evaluate both operands

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com