Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::compare_three_way

      From cppreference.com
      <cpp‎ |utility
       
       
      Utilities library
       
      Function objects
      Function invocation
      (C++17)(C++23)
      Identity function object
      (C++20)
      Old binders and adaptors
      (until C++17*)
      (until C++17*)
      (until C++17*)
      (until C++17*)  
      (until C++17*)
      (until C++17*)(until C++17*)(until C++17*)(until C++17*)
      (until C++20*)
      (until C++20*)
      (until C++17*)(until C++17*)
      (until C++17*)(until C++17*)

      (until C++17*)
      (until C++17*)(until C++17*)(until C++17*)(until C++17*)
      (until C++20*)
      (until C++20*)
       
      Defined in header<compare>
      Defined in header<functional>
      struct compare_three_way;
      (since C++20)

      Function object for performing comparisons. Deduces the parameter types and the return type of the function call operator.

      Contents

      [edit]Nested types

      Nested type Definition
      is_transparentunspecified

      [edit]Member functions

      operator()
      obtains the result of three-way comparison on both arguments
      (public member function)

      std::compare_three_way::operator()

      template<class T,class U>
      constexprauto operator()( T&& t, U&& u)const;

      Given the expressionstd::forward<T>(t)<=>std::forward<U>(u) asexpr:

      • If the conversion sequence fromT toP or the conversion sequence fromU toP is notequality-preserving, the behavior is undefined.
      • Otherwise:

      This overload participates in overload resolution only ifstd::three_way_comparable_with<T, U> is satisfied.

      [edit]Example

      Run this code
      #include <compare>#include <iostream> struct Rational{int num;int den;// > 0 // Although the comparison X <=> Y will work, a direct call// to std::compare_three_way{}(X, Y) requires the operator==// be defined, to satisfy the std::three_way_comparable_with.constexprbool operator==(Rationalconst&)const=default;}; constexprstd::weak_ordering operator<=>(Rational lhs, Rational rhs){return lhs.num* rhs.den<=> rhs.num* lhs.den;} void print(std::weak_ordering value){    value<0?std::cout<<"less\n":    value>0?std::cout<<"greater\n":std::cout<<"equal\n";} int main(){    Rational a{6,5};    Rational b{8,7};    print(a<=> b);    print(std::compare_three_way{}(a, b));}

      Output:

      greatergreater

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3530C++20syntactic checks were relaxed while comparing pointersonly semantic requirements are relaxed

      [edit]See also

      constrained function object implementingx== y
      (class)[edit]
      constrained function object implementingx!= y
      (class)[edit]
      constrained function object implementingx< y
      (class)[edit]
      constrained function object implementingx> y
      (class)[edit]
      constrained function object implementingx<= y
      (class)[edit]
      constrained function object implementingx>= y
      (class)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/compare/compare_three_way&oldid=168288"

      [8]ページ先頭

      ©2009-2025 Movatter.jp