std::ranges::view_interface<D>::operator bool
constexpr explicit operator bool() requires /* see below */;
|
(1) | (C++20 以上) |
constexpr explicit operator bool() const requires /* see below */;
|
(2) | (C++20 以上) |
operator bool メンバ関数のデフォルト実装は、ビューが空でないかどうかをチェックします。これにより、派生型は への文脈上の変換が可能になります。
bool
derived を static_cast<D&>(*this) とします。requires節内の式は requires { ranges::empty(derived); } と等しく、関数本体は return !ranges::empty(derived); と同等です。derived が static_cast<const D&>(*this) である点が異なります。戻り値
false 派生型の値が空の場合( std::ranges::empty によって判定)、 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)
|
範囲が空かどうかをチェックする
(カスタマイゼーションポイントオブジェクト) |
派生ビューが空かどうかを返す(
sized_range
または
forward_range
を満たす場合のみ提供)
(公開メンバ関数) |
|
|
(C++17)
|
コンテナが空かどうかをチェックする
(関数テンプレート) |