Namespaces
Variants

Non-propagating cache (C++20)

From cppreference.net
Ranges library
Range adaptors
Helper items
(until C++23) (C++23)
non-propagating-cache


template < class T >

requires std:: is_object_v < T >

class /*非伝播キャッシュ*/ ;
(C++20以降)
( 説明専用* )
翻訳内容: - `/*non-propagating-cache*/` → `/*非伝播キャッシュ*/` - `(since C++20)` → `(C++20以降)` - `(exposition only*)` → `(説明専用*)` - タイトルテキストを適切に翻訳 HTMLタグ、属性、コードブロック内のC++コードは一切翻訳せず、元のフォーマットを保持しています。C++専門用語もそのまま維持しています。

一部の範囲アダプタ、例えば ranges::join_view ranges::lazy_split_view は、説明専用のクラステンプレート non-propagating-cache で定義される値(例えばイテレータ)を条件付きで格納します。

このラッパーは std:: optional < T > と完全に同じ動作をしますが、以下の点が異なります:

  • コピー構築または代入時にソースの値をコピーしません、
  • ムーブ元のソースの値をリセットします、
  • 代入時に自身の値をリセットします、そして
  • さらに、入力ビューが反復処理される際に値を一時的にキャッシュできるようにするメンバー関数テンプレートを提供します。

ラッパーは値を含むキャッシュをカプセル化します。キャッシュのクリアは、含まれる値をリセットする操作と同等です。この操作は、ラッパーをコピーまたは移動する際に実行されます。

目次

テンプレートパラメータ

T - 格納される値の型。オブジェクト型でなければならない

メンバー関数

コピーコンストラクタとムーブコンストラクタ

constexpr /*non-propagating-cache*/
( const /*non-propagating-cache*/ & ) noexcept { }
(1) (C++20以降)
constexpr /*non-propagating-cache*/
( /*non-propagating-cache*/ && other ) noexcept { other. reset ( ) ; }
(2) (C++20以降)
1) コピーコンストラクタは何も効果を持たない。
2) ムーブコンストラクタは other のキャッシュをクリアする。

コピー代入演算子とムーブ代入演算子

constexpr /*non-propagating-cache*/ &

operator = ( const /*non-propagating-cache*/ & other ) noexcept
{
if ( std:: addressof ( other ) ! = this )
reset ( ) ;
return * this ;

}
(1) (C++20以降)
constexpr /*non-propagating-cache*/ &

operator = ( /*non-propagating-cache*/ && other ) noexcept
{
reset ( ) ;
other. reset ( ) ;
return * this ;

}
(2) (C++20以降)
1) コピー代入演算子は * this のキャッシュをクリアします。
2) ムーブ代入演算子は * this other の両方のキャッシュをクリアします。

non-propagating-cache <T>:: emplace-deref

template < class I >
constexpr T & /*emplace-deref*/ ( const I & i ) ;
(C++20以降)
( 説明専用* )

格納されている値を 直接初期化 (ただし直接リスト初期化ではない)によって * i で初期化します。呼び出し前に * this が既に値を保持している場合、 reset ( ) が呼び出されます。

新しく格納された値への参照を返します。

ある考案された変数 t に対して宣言 T t ( * i ) ; が適格でない場合、プログラムは不適格です。 * i T の(CV修飾可能性のある)prvalueである場合、移動可能である必要はありません。

std::optionalと同一のメンバー

メンバー関数

optional オブジェクトを構築する
( std::optional<T> の公開メンバー関数)
含まれている値がある場合、それを破棄する
( std::optional<T> の公開メンバー関数)
内容を代入する
( std::optional<T> の公開メンバー関数)
オブザーバー
含まれている値にアクセスする
( std::optional<T> の公開メンバー関数)
オブジェクトが値を含んでいるかどうかをチェックする
( std::optional<T> の公開メンバー関数)
モディファイア
含まれている値を破棄する
( std::optional<T> の公開メンバー関数)
含まれている値をその場で構築する
( std::optional<T> の公開メンバー関数)

注記

non-propagating-cache は実装において、 begin ( ) の結果をキャッシュするために使用され、このメソッドの償却定数時間計算量を提供します。

関連項目

view range s からなる view を平坦化して得られるシーケンスからなる view
(クラステンプレート) (range adaptor object)
rangeのviewを平坦化して得られるシーケンスからなる view (要素間に区切り文字を含む)
(クラステンプレート) (range adaptor object)
区切り文字を使用して別の view を分割して得られる部分rangeからなる view
(クラステンプレート) (range adaptor object)
区切り文字を使用して別の view を分割して得られる部分rangeからなる view
(クラステンプレート) (range adaptor object)
別の view の要素のNサイズの非重複連続チャンクである view s のrange
(クラステンプレート) (range adaptor object)