std::sized_sentinel_for, std::disable_sized_sentinel_for
From cppreference.com
| ヘッダ <iterator> で定義 |
||
| template< class S, class I > concept sized_sentinel_for = |
(1) | (C++20以降) |
| template< class S, class I > inline constexpr bool disable_sized_sentinel_for = false; |
(2) | (C++20以降) |
1) ンチネル型
sized_sentinel_for コンセプトは、イテレータ型 I のオブジェクトとセS のオブジェクトが、それらの間の距離を定数時間で計算するために減算可能であることを指定します。2)
disable_sized_sentinel_for 変数テンプレートは、減算可能であるが、実際には sized_sentinel_for をモデリングしていないイテレータとセノーティネルが、コンセプトを満たすことを防ぐために使用できます。 プログラムは、
S と I の両方が プログラム定義型である場合、cv 修飾されていない非配列オブジェクト型 S および I に対して disable_sized_sentinel_for を特殊化できます。このような特殊化は、定数式で使用でき、型は const bool です。目次 |
[編集] セマンティック要件
I 型のイテレータを i、S 型のセノーティネルを s とし、[i, s) が範囲を表すとします。 bool(i == s) が true になるまで ++i を適用する最小回数を n とします。 I と S が sized_sentinel_for<S, I> をモデリングするのは、以下のすべての条件が満たされる場合のみです。
- もし n が std::iter_difference_t<I> で表現可能ならば、 s - i は well-defined であり、 n に等しい。
- もし -n が std::iter_difference_t<I> で表現可能ならば、 i - s は well-defined であり、 -n に等しい。
[編集] 等価性保持
標準ライブラリのコンセプトのrequires式で宣言された式は、(特に明記されていない限り)等価性保持である必要があります。
[編集] 暗黙の式バリエーション
一部の定数左辺値オペランドに対して非変更的である式を使用するrequires式は、暗黙の式バリエーションも必要とする。
[編集] 関連項目
| (C++20) |
rangeが定数時間でそのサイズを知っていることを規定する (コンセプト) |
| (C++20) |
rangeのサイズと等しい整数を返す (カスタマイゼーションポイントオブジェクト) |