std::shared_ptr 的 bool 运算符在表达式中是如何被修改的(即 'bool is_empty = shared_ptr1 && shared_ptr2;' )?

How the bool operator of std::shared_ptr is trrigered in the expression(i.e. `bool is_empty = shared_ptr1 && shared_ptr2;` )?

提问人:John 提问时间:10/9/2023 最后编辑:John 更新时间:10/9/2023 访问量:63

问:

Gaven that 和 are both shared_ptr,std::shared_ptr 的 bool 运算符如何在表达式中进行尝试(即 )?cur_front_rescur_back_resbool is_empty = cur_front_res && cur_back_res;

仅仅因为如果操作数(即之前和之后)不是布尔类型,总是会导致内置转换?&&&&&&

下面的代码片段确实有效

#include <iostream>
#include <memory>

int main() {
    std::shared_ptr<int> cur_front_res; // Empty shared_ptr
    std::shared_ptr<int> cur_back_res(new int(42)); // Shared_ptr pointing to an int

    bool is_empty = cur_front_res && cur_back_res;

    if (is_empty) {
        std::cout << "Both cur_front_res and cur_back_res are not empty" << std::endl;
    } else {
        std::cout << "Either cur_front_res or cur_back_res is empty" << std::endl;
    }

    return 0;
}
C++ C++14 共享 PTR 智能指针

评论


答:

5赞 HolyBlackCat 10/9/2023 #1

仅仅因为如果操作数(即之前和之后)不是类型,总是会导致内置转换?&&&&&&bool

基本上是的。

但是这种转换有些特殊:即使 s 通常是(包括 for ),但在少数情况下可以隐式地调用它(“上下文布尔转换”)。除其他外,这些包括布尔运算符的操作数、条件等。booloperator boolexplicitshared_ptrifwhilefor