名前空間
変種
操作

std::experimental::ranges::Writable

From cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
イテレータライブラリ
イテレータのコンセプト
間接呼び出し可能コンセプト
                                                  
                                                  
                                                  
共通アルゴリズム要件
                                                  
Concept utilities
Iterator utilities and operations
Iterator traits
イテレータアダプタ
ストリームイテレータ
 
template< class Out, class T >

concept bool Writable =
    requires(Out&& o, T&& t) {
        *o = std::forward<T>(t);
        *std::forward<Out>(o) = std::forward<T>(t);
        const_cast<const ranges::reference_t<Out>&&>(*o) =
            std::forward<T>(t);
        const_cast<const ranges::reference_t<Out>&&>(*std::forward<Out>(o)) =
            std::forward<T>(t);
    };

    /* none of the four expressions above are required to be equality-preserving */
(ranges TS)

コンセプトWritable<Out, T>は、Tによってエンコードされる型と値カテゴリを持つ値(value)を、イテレータOutが参照するオブジェクトに書き込むための要件を指定します。

decltype((E))Tであり、oOut型のデリファレンス可能なオブジェクトであるような式Eが存在する場合、Writable<Out, T>は次の場合にのみ満たされます。

  • もしReadable<Out> && Same<ranges::value_type_t<Out>, std::decay_t<T>>が満たされる場合、上記のいずれかの代入の後、*oは代入前のEの値と等しくなります。

上記のいずれかの代入式の評価後、oがデリファレンス可能である必要はありません。Eがxvalueの場合、それが示すオブジェクトの最終的な状態は有効ですが未規定です。

[編集] 等価性保持

式が**等価性保持**であるとは、等しい入力に対して等しい出力を生成することを意味します。

  • 式の入力は、そのオペランドで構成されます。
  • 式の出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。

等価性保持が要求されるすべての式は、さらに**安定**である必要があります。同じ入力オブジェクトでそのような式の2回の評価は、これらの入力オブジェクトの明示的な介入的な変更がない限り、等しい出力を持ちます。

[編集] 注記

operator*の有効な唯一の使用法は、代入式の左辺です。書き込み可能な型の同じ値に対する代入は、一度しか行われない場合があります。

const_castを伴う必須の式は、Readableオブジェクトでreference型がprvalueである場合に、誤ってWritableの構文要件を満たすことを防ぎますが、プロキシ参照がそれらのconst性(constness)がシャローである限り、引き続き機能することを許可します。詳細はRanges TS issue 381を参照してください。

English 日本語 中文(简体) 中文(繁體)