如何在表达式中触发 std::shared_ptr 的 bool 运算符(即 `bool is_empty = cur_front_res && cur_back_res;` )?

问题描述 投票:0回答:1

假设

cur_front_res
cur_back_res
都是shared_ptr,那么 std::shared_ptr 的 bool 运算符如何在表达式中触发(即
bool 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 shared-ptr smart-pointers
1个回答
0
投票

仅仅因为如果操作数(即

&&
之前和
&&
之后)不是
&&
类型,
bool
总是会导致内置转换?

基本上是的。

但是

bool
转换有点特殊:尽管
operator bool
通常是
explicit
(包括
shared_ptr
),但在少数情况下可以隐式调用它(“上下文布尔转换”) )。其中包括布尔运算符的操作数、
if
/
while
/
for
条件等

© www.soinside.com 2019 - 2024. All rights reserved.