假设
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;
}
仅仅因为如果操作数(即
之前和&&
之后)不是&&
类型,&&
总是会导致内置转换?bool
基本上是的。
但是
bool
转换有点特殊:尽管 operator bool
通常是 explicit
(包括 shared_ptr
),但在少数情况下可以隐式调用它(“上下文布尔转换”) )。其中包括布尔运算符的操作数、if
/while
/for
条件等