名前空間
変種
操作

std::experimental::ranges::Swappable、std::experimental::ranges::SwappableWith

From cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
コンセプトライブラリ
中核言語のコンセプト
                              
SwappableSwappableWith
オブジェクトのコンセプト
                              
                              
比較のコンセプト
呼び出し可能オブジェクトのコンセプト
                                        
                              
URNGコンセプト
 
template< class T >

concept bool Swappable =
    requires(T& a, T& b) {
        ranges::swap(a, b);

    };
(1) (ranges TS)
template< class T, class U >

concept bool SwappableWith =
    CommonReference<
        const std::remove_reference_t<T>&,
        const std::remove_reference_t<U>&> &&
    requires(T&& t, U&& u) {
        ranges::swap(std::forward<T>(t), std::forward<T>(t));
        ranges::swap(std::forward<U>(u), std::forward<U>(u));
        ranges::swap(std::forward<T>(t), std::forward<U>(u));
        ranges::swap(std::forward<U>(u), std::forward<T>(t));

    };
(2) (ranges TS)

コンセプト Swappable<T> は、型 T の左辺値が交換可能であることを指定します。

コンセプト SwappableWith<T, U> は、TU によってエンコードされた型と値カテゴリの式が互いに交換可能であることを指定します。SwappableWith<T, U> は、ranges::swap(t, u) の呼び出しが tu の値を交換する場合にのみ満たされます。つまり、t と等しい別個のオブジェクト t2 および u と等しい別個のオブジェクト u2 が与えられた場合、ranges::swap(t, u) または ranges::swap(u, t) のいずれかを評価した後、t2u と等しく、u2t と等しくなります。

[編集] 等価性保持

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

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

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

特に断りがない限り、requires-expression で使用されるすべての式は、等価性を保持し、安定であることが要求され、式の評価は定数でないオペランドのみを変更できます。定数のオペランドは変更してはいけません。

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