C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- æ ååºå¤´æä»¶ <ctime>
- æ ååºå¤´æä»¶ <cstring>
- æ ååºå¤´æä»¶ <set>
- æ ååºå¤´æä»¶ <cctype>
- æ ååºå¤´æä»¶ <cwctype>
- æ ååºå¤´æä»¶ <utility>
- æ ååºå¤´æä»¶ <queue>
- æ ååºå¤´æä»¶ <complex>
- æ ååºå¤´æä»¶ <iterator>
- æ ååºå¤´æä»¶ <algorithm>
- æ ååºå¤´æä»¶ <valarray>
- æ ååºå¤´æä»¶ <numeric>
- æ ååºå¤´æä»¶ <cmath>
- æ ååºå¤´æä»¶ <iosfwd>
- æ ååºå¤´æä»¶ <ios>
- æ ååºå¤´æä»¶ <iomanip>
- æ ååºå¤´æä»¶ <streambuf>
- æ ååºå¤´æä»¶ <istream>
- æ ååºå¤´æä»¶ <ostream>
- æ ååºå¤´æä»¶ <iostream>
- æ ååºå¤´æä»¶ <sstream>
- æ ååºå¤´æä»¶ <clocale>
- æ ååºå¤´æä»¶ <vector>
- æ ååºå¤´æä»¶ <deque>
- æ ååºå¤´æä»¶ <list>
- æ ååºå¤´æä»¶ <map>
- æ ååºå¤´æä»¶ <cwchar>
- æ ååºå¤´æä»¶ <locale>
- æ ååºå¤´æä»¶ <codecvt>
- æ ååºå¤´æä»¶ <bitset>
- æ ååºå¤´æä»¶ <functional>
- æ ååºå¤´æä»¶ <stdexcept>
- æ ååºå¤´æä»¶ <csignal>
- æ ååºå¤´æä»¶ <csetjmp>
- æ ååºå¤´æä»¶ <stack>
- æ ååºå¤´æä»¶ <cassert>
- æ ååºå¤´æä»¶ <cerrno>
- æ ååºå¤´æä»¶ <memory>
- æ ååºå¤´æä»¶ <typeindex>
- æ ååºå¤´æä»¶ <type_traits>
- æ ååºå¤´æä»¶ <chrono>
- æ ååºå¤´æä»¶ <initializer_list>
- æ ååºå¤´æä»¶ <tuple>
- æ ååºå¤´æä»¶ <scoped_allocator>
- æ ååºå¤´æä»¶ <cstdint>
- æ ååºå¤´æä»¶ <cinttypes>
- æ ååºå¤´æä»¶ <system_error>
- æ ååºå¤´æä»¶ <cuchar>
- æ ååºå¤´æä»¶ <array>
- æ ååºå¤´æä»¶ <forward_list>
- æ ååºå¤´æä»¶ <unordered_set>
- æ ååºå¤´æä»¶ <unordered_map>
- æ ååºå¤´æä»¶ <random>
- æ ååºå¤´æä»¶ <ratio>
- æ ååºå¤´æä»¶ <cfenv>
- æ ååºå¤´æä»¶ <regex>
- æ ååºå¤´æä»¶ <atomic>
- æ ååºå¤´æä»¶ <thread>
- æ ååºå¤´æä»¶ <mutex>
- æ ååºå¤´æä»¶ <future>
- æ ååºå¤´æä»¶ <condition_variable>
- æ ååºå¤´æä»¶ <any>
- æ ååºå¤´æä»¶ <optional>
- æ ååºå¤´æä»¶ <variant>
- æ ååºå¤´æä»¶ <memory_resource>
- æ ååºå¤´æä»¶ <string_view>
- æ ååºå¤´æä»¶ <charconv>
- æ ååºå¤´æä»¶ <execution>
- æ ååºå¤´æä»¶ <filesystem>
- æ ååºå¤´æä»¶ <concepts>
- æ ååºå¤´æä»¶ <coroutine>
- æ ååºå¤´æä»¶ <compare>
- æ ååºå¤´æä»¶ <version>
- æ ååºå¤´æä»¶ <source_location>
- æ ååºå¤´æä»¶ <format>
- æ ååºå¤´æä»¶ <span>
- æ ååºå¤´æä»¶ <ranges>
- æ ååºå¤´æä»¶ <bit>
- æ ååºå¤´æä»¶ <numbers>
- æ ååºå¤´æä»¶ <syncstream>
- æ ååºå¤´æä»¶ <stop_token>
- æ ååºå¤´æä»¶ <semaphore>
- æ ååºå¤´æä»¶ <latch>
- æ ååºå¤´æä»¶ <barrier>
- æ ååºå¤´æä»¶ <string>
- æ ååºå¤´æä»¶ <cstddef>
- æ ååºå¤´æä»¶ <limits>
- æ ååºå¤´æä»¶ <cfloat>
- æ ååºå¤´æä»¶ <climits>
- æ ååºå¤´æä»¶ <cstdlib>
- æ ååºå¤´æä»¶ <new>
- æ ååºå¤´æä»¶ <typeinfo>
- æ ååºå¤´æä»¶ <exception>
- æ ååºå¤´æä»¶ <cstdarg>
- æ ååºå¤´æä»¶ <ciso646>
- æ ååºå¤´æä»¶ <cstdalign>
- æ ååºå¤´æä»¶ <cstdbool>
- æ ååºå¤´æä»¶ <fstream>
- æ ååºå¤´æä»¶ <cstdio>
- æ ååºå¤´æä»¶ <strstream>
- æ ååºå¤´æä»¶ <shared_mutex>
- æ ååºå¤´æä»¶ <ccomplex>
- æ ååºå¤´æä»¶ <ctgmath>
- 注é
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >C++ æ ååºå¤´æä»¶ > æ ååºå¤´æä»¶ <compare>
æ ååºå¤´æä»¶ <compare>
æ¤å¤´æä»¶æ¯éç¨å·¥å ·åºçä¸é¨åã
æ¦å¿µ
| æå®è¿ç®ç¬¦ <=> å¨ç»å®ç±»åä¸äº§çä¸è´çç»æ (æ¦å¿µ) |
ç±»
| (C++20) |
ä¸è·¯æ¯è¾çç»æç±»åï¼æ¯æææ 6 ç§è¿ç®ç¬¦ï¼ä¸å¯æ¿æ¢ï¼å¹¶å
许ä¸å¯æ¯è¾çå¼ (ç±») |
| (C++20) |
ä¸è·¯æ¯è¾çç»æç±»åï¼æ¯æææ 6 ç§è¿ç®ç¬¦ä¸ä¸å¯æ¿æ¢ (ç±») |
| (C++20) |
ä¸è·¯æ¯è¾çç»æç±»åï¼æ¯æææ 6 ç§è¿ç®ç¬¦ä¸å¯æ¿æ¢ (ç±») |
| (C++20) |
ç»å®çå
¨é¨ç±»åé½è½è½¬æ¢å°çæå¼ºæ¯è¾ç±»å« (类模æ¿) |
| (C++20) |
è·å¾ä¸è·¯æ¯è¾è¿ç®ç¬¦ <=> å¨ç»å®ç±»åä¸çç»æ (类模æ¿) |
| (C++20) |
å®ç° x <=> y ç彿°å¯¹è±¡ (ç±») |
å®å¶ç¹å¯¹è±¡
| (C++20) |
è¿è¡ä¸è·¯æ¯è¾å¹¶äº§ç std::strong_ordering ç±»åç»æ (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
è¿è¡ä¸è·¯æ¯è¾å¹¶äº§ç std::weak_ordering ç±»åç»æ (å®å¶ç¹å¯¹è±¡) |
| (C++20) |
è¿è¡ä¸è·¯æ¯è¾å¹¶äº§ç std::partial_ordering ç±»åç»æ (å®å¶ç¹å¯¹è±¡) |
è¿è¡ä¸è·¯æ¯è¾å¹¶äº§ç std::strong_ordering ç±»åçç»æï¼å³ä½¿ operator<=> ä¸å¯ç¨ (å®å¶ç¹å¯¹è±¡) | |
| (C++20) |
è¿è¡ä¸è·¯æ¯è¾å¹¶äº§ç std::weak_ordering ç±»åçç»æï¼å³ä½¿ operator<=> ä¸å¯ç¨ (å®å¶ç¹å¯¹è±¡) |
è¿è¡ä¸è·¯æ¯è¾å¹¶äº§ç std::partial_ordering ç±»åçç»æï¼å³ä½¿ operator<=> ä¸å¯ç¨ (å®å¶ç¹å¯¹è±¡) |
彿°
| å
·åæ¯è¾å½æ° (彿°) |
æ¦è¦
namespace std { // æ¯è¾ç±»å«ç±»å class partial_ordering; class weak_ordering; class strong_ordering;  // å ·åæ¯è¾å½æ° constexpr bool is_eq (partial_ordering cmp) noexcept { return cmp == 0; } constexpr bool is_neq (partial_ordering cmp) noexcept { return cmp != 0; } constexpr bool is_lt (partial_ordering cmp) noexcept { return cmp < 0; } constexpr bool is_lteq(partial_ordering cmp) noexcept { return cmp <= 0; } constexpr bool is_gt (partial_ordering cmp) noexcept { return cmp > 0; } constexpr bool is_gteq(partial_ordering cmp) noexcept { return cmp >= 0; }  // å ±ç¨æ¯è¾ç±»å«ç±»å template<class... Ts> struct common_comparison_category { using type = /* see description */; }; template<class... Ts> using common_comparison_category_t = typename common_comparison_category<Ts...>::type;  // æ¦å¿µ three_way_comparable template<class T, class Cat = partial_ordering> concept three_way_comparable = /* see description */; template<class T, class U, class Cat = partial_ordering> concept three_way_comparable_with = /* see description */;  // ä¸è·¯æ¯è¾çç»æ template<class T, class U = T> struct compare_three_way_result;  template<class T, class U = T> using compare_three_way_result_t = typename compare_three_way_result<T, U>::type;  // ç±» compare_three_way struct compare_three_way;  // æ¯è¾ç®æ³ inline namespace /* æªææ */ { inline constexpr /* æªææ */ strong_order = /* æªææ */; inline constexpr /* æªææ */ weak_order = /* æªææ */; inline constexpr /* æªææ */ partial_order = /* æªææ */; inline constexpr /* æªææ */ compare_strong_order_fallback = /* æªææ */; inline constexpr /* æªææ */ compare_weak_order_fallback = /* æªææ */; inline constexpr /* æªææ */ compare_partial_order_fallback = /* æªææ */; } }
æ¦å¿µ three_way_comparable
namespace std { template<class T, class Cat> concept __ComparesAs = // ä» ç¨äºéé same_as<common_comparison_category_t<T, Cat>, Cat>;  template<class T, class U> concept __PartiallyOrderedWith = // ä» ç¨äºéé requires(const remove_reference_t<T>& t, const remove_reference_t<U>& u) { { t < u } -> boolean; { t > u } -> boolean; { t <= u } -> boolean; { t >= u } -> boolean; { u < t } -> boolean; { u > t } -> boolean; { u <= t } -> boolean; { u >= t } -> boolean; };  template<class T, class Cat = partial_ordering> concept three_way_comparable = __WeaklyEqualityComparableWith<T, T> && __PartiallyOrderedWith<T, T> && requires(const remove_reference_t<T>& a, const remove_reference_t<T>& b) { { a <=> b } -> __ComparesAs<Cat>; }; }
æ¦å¿µ three_way_comparable_with
namespace std { template<class T, class U, class Cat = partial_ordering> concept three_way_comparable_with = __WeaklyEqualityComparableWith<T, U> && __PartiallyOrderedWith<T, U> && three_way_comparable<T, Cat> && three_way_comparable<U, Cat> && common_reference_with<const remove_reference_t<T>&, const remove_reference_t<U>&> && three_way_comparable< common_reference_t< const remove_reference_t<T>&, const remove_reference_t<U>&>, Cat> && requires(const remove_reference_t<T>& t, const remove_reference_t<U>& u) { { t <=> u } -> __ComparesAs<Cat>; { u <=> t } -> __ComparesAs<Cat>; }; }
ç±» std::partial_ordering
namespace std { class partial_ordering { int value; // ä» ç¨äºéé bool is_ordered; // ä» ç¨äºéé  // ä» ç¨äºééçæé 彿° constexpr explicit partial_ordering(eq v) noexcept : value(int(v)), is_ordered(true) {} // ä» ç¨äºéé constexpr explicit partial_ordering(ord v) noexcept : value(int(v)), is_ordered(true) {} // ä» ç¨äºéé constexpr explicit partial_ordering(ncmp v) noexcept : value(int(v)), is_ordered(false) {} // ä» ç¨äºéé  public: // åæ³å¼ static const partial_ordering less; static const partial_ordering equivalent; static const partial_ordering greater; static const partial_ordering unordered;  // æ¯è¾ friend constexpr bool operator==(partial_ordering v, /* æªææ */) noexcept; friend constexpr bool operator==(partial_ordering v, partial_ordering w) noexcept = default; friend constexpr bool operator< (partial_ordering v, /* æªææ */) noexcept; friend constexpr bool operator> (partial_ordering v, /* æªææ */) noexcept; friend constexpr bool operator<=(partial_ordering v, /* æªææ */) noexcept; friend constexpr bool operator>=(partial_ordering v, /* æªææ */) noexcept; friend constexpr bool operator< (/* æªææ */, partial_ordering v) noexcept; friend constexpr bool operator> (/* æªææ */, partial_ordering v) noexcept; friend constexpr bool operator<=(/* æªææ */, partial_ordering v) noexcept; friend constexpr bool operator>=(/* æªææ */, partial_ordering v) noexcept; friend constexpr partial_ordering operator<=>(partial_ordering v, /* æªææ */) noexcept; friend constexpr partial_ordering operator<=>(/* æªææ */, partial_ordering v) noexcept; };  // åæ³å¼çå®ä¹ inline constexpr partial_ordering partial_ordering::less(ord::less); inline constexpr partial_ordering partial_ordering::equivalent(eq::equivalent); inline constexpr partial_ordering partial_ordering::greater(ord::greater); inline constexpr partial_ordering partial_ordering::unordered(ncmp::unordered); }
ç±» std::weak_ordering
namespace std { class weak_ordering { int value; // ä» ç¨äºéé  // ä» ç¨äºééçæé 彿° constexpr explicit weak_ordering(eq v) noexcept : value(int(v)) {} // ä» ç¨äºéé constexpr explicit weak_ordering(ord v) noexcept : value(int(v)) {} // ä» ç¨äºéé  public: // åæ³å¼ static const weak_ordering less; static const weak_ordering equivalent; static const weak_ordering greater;  // è½¬æ¢ constexpr operator partial_ordering() const noexcept;  // æ¯è¾ friend constexpr bool operator==(weak_ordering v, /* æªææ */) noexcept; friend constexpr bool operator==(weak_ordering v, weak_ordering w) noexcept = default; friend constexpr bool operator< (weak_ordering v, /* æªææ */) noexcept; friend constexpr bool operator> (weak_ordering v, /* æªææ */) noexcept; friend constexpr bool operator<=(weak_ordering v, /* æªææ */) noexcept; friend constexpr bool operator>=(weak_ordering v, /* æªææ */) noexcept; friend constexpr bool operator< (/* æªææ */, weak_ordering v) noexcept; friend constexpr bool operator> (/* æªææ */, weak_ordering v) noexcept; friend constexpr bool operator<=(/* æªææ */, weak_ordering v) noexcept; friend constexpr bool operator>=(/* æªææ */, weak_ordering v) noexcept; friend constexpr weak_ordering operator<=>(weak_ordering v, /* æªææ */) noexcept; friend constexpr weak_ordering operator<=>(/* æªææ */, weak_ordering v) noexcept; };  // åæ³å¼çå®ä¹ inline constexpr weak_ordering weak_ordering::less(ord::less); inline constexpr weak_ordering weak_ordering::equivalent(eq::equivalent); inline constexpr weak_ordering weak_ordering::greater(ord::greater); }
ç±» std::strong_ordering
namespace std { class strong_ordering { int value; // ä» ç¨äºéé  // ä» ç¨äºééçæé 彿° constexpr explicit strong_ordering(eq v) noexcept : value(int(v)) {} // ä» ç¨äºéé constexpr explicit strong_ordering(ord v) noexcept : value(int(v)) {} // ä» ç¨äºéé  public: // åæ³å¼ static const strong_ordering less; static const strong_ordering equal; static const strong_ordering equivalent; static const strong_ordering greater;  // è½¬æ¢ constexpr operator partial_ordering() const noexcept; constexpr operator weak_ordering() const noexcept;  // æ¯è¾ friend constexpr bool operator==(strong_ordering v, /* æªææ */) noexcept; friend constexpr bool operator==(strong_ordering v, strong_ordering w) noexcept = default; friend constexpr bool operator< (strong_ordering v, /* æªææ */) noexcept; friend constexpr bool operator> (strong_ordering v, /* æªææ */) noexcept; friend constexpr bool operator<=(strong_ordering v, /* æªææ */) noexcept; friend constexpr bool operator>=(strong_ordering v, /* æªææ */) noexcept; friend constexpr bool operator< (/* æªææ */, strong_ordering v) noexcept; friend constexpr bool operator> (/* æªææ */, strong_ordering v) noexcept; friend constexpr bool operator<=(/* æªææ */, strong_ordering v) noexcept; friend constexpr bool operator>=(/* æªææ */, strong_ordering v) noexcept; friend constexpr strong_ordering operator<=>(strong_ordering v, /* æªææ */) noexcept; friend constexpr strong_ordering operator<=>(/* æªææ */, strong_ordering v) noexcept; };  // åæ³å¼çå®ä¹ inline constexpr strong_ordering strong_ordering::less(ord::less); inline constexpr strong_ordering strong_ordering::equal(eq::equal); inline constexpr strong_ordering strong_ordering::equivalent(eq::equivalent); inline constexpr strong_ordering strong_ordering::greater(ord::greater); }
ç±» std::compare_three_way
namespace std { struct compare_three_way { template<class T, class U> requires three_way_comparable_with<T, U> || /*BUILTIN-PTR-THREE-WAY*/(T, U) constexpr auto operator()(T&& t, U&& u) const;  using is_transparent = /* æªææ */; }; }