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

来自cppreference.com
 
 
范围库
范围访问
范围转换器
(C++23)
范围原语



悬垂迭代器处理
范围概念
视图

范围工厂
适配器
范围生成器
范围适配器对象
范围适配器闭包对象
辅助项
 
std::ranges::view_interface
成员函数
(C++20)
(C++23)
(C++23)
operator bool
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
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)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
              << "Has odd numbers: " << (!!odds) << ' ' << '\n'
              << "Has negative numbers: " << (!!negs) << ' ' << '\n';
}

输出:

Has odd numbers: true 
Has negative numbers: false

参阅

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