std::ranges::view_interface<D>::operator bool

来自cppreference.com
 
 
范围库
范围适配器
 
 
constexpr explicit operator bool() requires /* 见下文 */;
(1) (C++20 起)
constexpr explicit operator bool() const requires /* 见下文 */;
(2) (C++20 起)

operator bool 成员函数的默认实现检查视图是否为非空。它使得派生类型可按语境转换成 bool

1)derivedstatic_cast<D&>(*this)。requires 子句中的表达式等于 requires { ranges::empty(derived); },而函数体等价于 return ranges::empty(derived);
2)(1),但 derivedstatic_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
              << "有奇数: " << (!!odds) << ' ' << '\n'
              << "有负数: " << (!!negs) << ' ' << '\n';
}

输出:

有奇数: true
有负数: false

参阅

检查范围是否为空
(定制点对象)
返回视图是否为空。仅当视图满足 forward_range 时提供。
(公开成员函数)
(C++17)
检查容器是否为空
(函数模板)