名前空間
変種
操作

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

From cppreference.com
 
 
Rangesライブラリ
Rangeアダプタ
 
 
constexpr explicit operator bool() requires /* 以下参照 */;
(1) (C++20以降)
constexpr explicit operator bool() const requires /* 以下参照 */;
(2) (C++20以降)

`operator bool` メンバ関数のデフォルト実装は、ビューが空でないかどうかをチェックします。これにより、派生型は コンテキスト的に `bool` に変換可能になります。

1) `derived` を `static_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

[編集] 関連項目

rangeが空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト)[編集]
派生ビューが空かどうかを返す。sized_range または forward_range を満たす場合にのみ提供される
(public member function) [編集]
(C++17)
コンテナが空かどうかをチェックする
(function template) [編集]
English 日本語 中文(简体) 中文(繁體)