std::ranges::view_interface<D>::operator bool
From cppreference.com
< cpp | ranges | view interface
| 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) と同じですが、
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
[編集] 関連項目
| (C++20) |
rangeが空かどうかをチェックする (カスタマイゼーションポイントオブジェクト) |
派生ビューが空かどうかを返す。sized_range または forward_range を満たす場合にのみ提供される(public member function) | |
| (C++17) |
コンテナが空かどうかをチェックする (function template) |