std::ranges::view_interface<D>::operator bool
来自cppreference.com
< cpp | ranges | view interface
explicit constexpr operator bool() requires /* see below */; |
(1) | (C++20 起) |
explicit constexpr operator bool() const requires /* see below */; |
(2) | (C++20 起) |
operator bool 成员函数的默认实现检查视图是否为非空。它使得派生类型可按语境转换成 bool 。
1) 令
derived
为 static_cast<D&>(*this) 。 requires 子句中的表达式等于 requires { ranges::empty(derived); } ,而函数体等价于 return ranges::empty(derived); 。2) 同 (1) ,除了
derived
为 static_cast<const D&>(*this) 。参数
(无)
返回值
若派生类型的值为空(由 std::ranges::empty 确定)则为 false ,否则为 true 。
注解
C++20 中,标准库中无派生自 std::ranges::view_interface 的类型提供其自身的 operator bool 。几乎所有这些类型都使用默认实现。
一个值得注意的例外是 std::ranges::basic_istream_view 。由于其迭代器类型决不满足 forward_iterator
,故视图不能使用继承的 operator bool 。
示例
运行此代码
#include <array> #include <iostream> #include <ranges> int main() { const std::array ints {0, 1, 2, 3, 4}; auto odds = ints | std::views::filter([](int i) { return 0 != i % 2; }); auto negs = ints | std::views::filter([](int i) { return i < 0; }); std::cout << std::boolalpha << "Has odd numbers: " << (!!odds) << ' ' << '\n' << "Has negative numbers: " << (!!negs) << ' ' << '\n'; }
输出:
Has odd numbers: true Has negative numbers: false
参阅
(C++20) |
检查范围是否为空 (定制点对象) |
(C++20) |
返回视图是否为空。若视图满足 forward_range 则提供。 (公开成员函数) |
(C++17) |
检查容器是否为空 (函数模板) |