名前空間
変種
操作

std::experimental::ranges::EqualityComparable、std::experimental::ranges::EqualityComparableWith

From cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
コンセプトライブラリ
中核言語のコンセプト
                              
オブジェクトのコンセプト
                              
                              
比較のコンセプト
EqualityComparableEqualityComparableWith
呼び出し可能オブジェクトのコンセプト
                                        
                              
URNGコンセプト
 
template< class T >
concept bool EqualityComparable = WeaklyEqualityComparableWith<T, T>;
(1) (ranges TS)
template< class T, class U >

concept bool EqualityComparableWith =
    EqualityComparable<T> &&
    EqualityComparable<U> &&
    CommonReference<
        const std::remove_reference_t<T>&,
        const std::remove_reference_t<U>&> &&
    EqualityComparable<
        ranges::common_reference_t<
            const std::remove_reference_t<T>&,
            const std::remove_reference_t<U>&>> &&

    WeaklyEqualityComparableWith<T, U>;
(2) (ranges TS)
1) concept EqualityComparable<T> は、T に対する比較演算子 == および != が等価性を反映することを指定します。すなわち、== はオペランドが等しい場合にのみ true を返します。
EqualityComparable<T> は、型 T のオブジェクト a および b が与えられたとき、bool(a == b)ab が等しい場合にのみ true になる場合にのみ満たされます。さらに、a == b が等価性を保持するという要件と合わせて、これは == が対称的かつ推移的であり、さらに == が少なくとも他のオブジェクトと等しいすべてのオブジェクト a に対して反射的であることを意味します。
2) concept EqualityComparableWith<T, U> は、(混合される可能性のある) T および U オペランドに対する比較演算子 == および != が等価性と整合性のとれた結果を返されることを指定します。混合オペランドの比較は、オペランドを共通の型に変換した場合の結果と同等になります。
形式的には、EqualityComparableWith<T, U> は、型 const std::remove_reference_t<T> の任意の左辺値 t と、型 const std::remove_reference_t<U> の任意の左辺値 u が与えられたとき、Cranges::common_reference_t<const std::remove_reference_t<T>&, const std::remove_reference_t<U>&> とすると、bool(t == u) == bool(C(t) == C(u)) になる場合にのみ満たされます。

[編集] 等価性保持

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

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

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

[編集] 暗黙的な式バリエーション

ある定数左辺値オペランドに対して非変更的な式を使用する requires-expression は、明示的に異なる意味で要求されていない限り、そのオペランドに対して非定数左辺値または(定数であるか否かにかかわらず)右辺値を受け入れる、その式の追加のバリエーションも暗黙的に要求します。これらの 暗黙的な式バリエーション は、宣言された式の意味要件と同じ要件を満たさなければなりません。実装がこれらのバリエーションの構文をどの程度検証するかは未規定です。

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