关于使用共享指针的评估顺序
about order of evaluation using shared pointers
我对使用共享指针时在if-lause中的评估顺序有疑问。
假设我有以下
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_->canUse()
之前评估myclass_ptr_
?
如果情况并非总是如此,并且myclass_ptr_
可能是由于某种原因而来的,并且不是初始化的,我肯定会遇到应用程序。
当我运行此应用程序时,它似乎可以正常工作,但是我只想与某人确认以避免发行中令人讨厌的惊喜。
您知道在这种情况下C 是否总是保证
myclass_ptr_
为 在myclass_ptr_->canUse()
之前进行评估?
是。此案不属于评估顺序,而是&&
的简短循环规则。
从此页面上的脚注。
内置运营商&amp;&amp;和||执行短路评估(DO 如果结果已知,则不评估第二操作数 评估第一个),但超载运营商的行为就像常规 函数调用,并始终评估两个操作数
还请阅读为什么当这些操作员被超载时没有电路。
相关文章:
- c++11评估顺序(未定义的行为)
- C++评估顺序优化是否意味着对不同的操作数使用不同的内核?
- 令人不安的评估顺序
- 函数参数计算顺序与 Lambda 捕获评估顺序
- std::apply是否为评估顺序提供保证
- 类型(x0 = y0,x1 = y1,x2 = x0,..)的括号和逗号表达中的评估顺序
- C++ C++17 中的序列点和对评估顺序的更改
- 关于使用共享指针的评估顺序
- C 17带有运营商超载功能的评估顺序
- 折叠表达式评估顺序
- C 评估顺序
- X().Y(Z()) 和标准中的评估顺序
- 评估顺序异常
- C++可变参数模板和评估顺序
- C++评估顺序:除法与加法
- 评估顺序 >> 和 [++]
- 函数参数评估顺序
- C++中分配语句的评估顺序
- 评估顺序和未定义的行为
- "IF"参数评估顺序?