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

< 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

### 参阅

ranges::empty (C++20) | 检查范围是否为空 (定制点对象)
empty (C++20) | 返回视图是否为空。若视图满足 `forward_range` 则提供。 (公开成员函数)
empty (C++17) | 检查容器是否为空 (函数模板)