Namespaces
Variants

std::ranges::view_interface<D>::operator[]

From ja.cppreference.net
 
 
範囲ライブラリ
範囲アダプタ
 
 
template<ranges::random_access_range R = D>
constexpr decltype(auto) operator[]( ranges::range_difference_t<R> n );
(1) (C++20以降)
template<ranges::random_access_range R = const D>
constexpr decltype(auto) operator[]( ranges::range_difference_t<R> n ) const;
(2) (C++20以降)

メンバ関数 operator[] のデフォルト実装は、先頭のイテレータからの指定されたオフセット位置の要素を取得し、イテレータ型の operator[] を再利用します。

1) derived を static_cast<D&>(*this) とします。return ranges::begin(derived)[n]; と等価です。
2) オーバーロード (1) と同じですが、 が derived である点が異なります。static_cast<const D&>(*this)

パラメータ

n - 返される要素の位置

戻り値

先頭イテレータからのオフセット n にある要素。

注記

C++20では、標準ライブラリ内の std::ranges::view_interface から派生した型は、独自の operator [ ] メンバ関数を提供しません。

しかし、以下の派生型はデフォルト実装を使用できません。なぜなら、これらは決して random_access_range を満たさないためです:

注:指定された要件に基づき、HTMLタグ・属性、・
・タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しています。表示されているテキストは全てC++標準ライブラリの範囲アダプタ名であり、翻訳対象外のため原文のまま維持されています。

継承された operator [ ] メンバー関数は std::ranges::empty_view で利用可能ですが、これを呼び出すと常に未定義動作が発生します。

例