`std :: less`はどのように機能しますか?

rom1v

ポインター関係演算子は全順序を定義しません(C ++ 11標準の§5.9):

二つのポインタ場合pq同じオブジェクトまたは同じアレイの又は異なる機能の要素のメンバーではない別のオブジェクトに同じタイプの点の、またはそれらの一方のみがNULLである場合、の結果p<qp>qp<=q、およびp>=q不特定です。

std :: lessドキュメントによると:

std::less任意のポインタ型に対するの部分的な特殊化は、組み込みがoperator<そうでない場合でも、全順序を生成します。

半順序からこの全順序をどのように生成しますか?


私はを見て、この質問に答えることができません/usr/include/c++/4.9/bits/stl_function.hのためのstruct less定義:

  template<typename _Tp = void>
    struct less;

  template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };

  template<>
    struct less<void>
    {
      template <typename _Tp, typename _Up>
        auto
        operator()(_Tp&& __t, _Up&& __u) const
        noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
        -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
        { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }

      typedef __is_transparent is_transparent;
    };

半順序からこの全順序をどのように生成しますか?

規格は何かがどのように達成されるべきかをめったに述べいません。代わりに、何が必要かを示しています。そして、これはまさにその通りです。規格ではstd::less、§20.9.6/ 14で全順序を提供する必要があります。

テンプレートgreater、less、greater_equal、less_equalの場合、組み込み演算子<、>、<=、> =が生成しない場合でも、任意のポインター型の特殊化により全順序が生成されます。

一方でoperator<、この点での振る舞いがあり、不特定§5.9/ 4(あなたがあなたの質問を持っている引用符)によります。

不特定の動作は、§1.3.25で次のように定義されています。

実装に依存する、整形式のプログラム構成と正しいデータの動作[...]

特定の実装では、operator<すでに全順序を提供しているため(おそらく、ポインター型が32ビットまたは64ビットのアドレスとして実装されているため、符号なし整数に似たものとして簡単に解釈でき、全順序が得られます)、std::less単純にその演算子への引数。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

std :: strlenは内部的にどのように機能しますか?

分類Dev

std :: flushはどのように機能しますか?

分類Dev

std :: tieはどのように機能しますか?

分類Dev

std :: forwardはどのように機能しますか?

分類Dev

std :: enable_ifはどのように機能しますか?

分類Dev

`std :: mem :: swap`はどのように機能しますか?

分類Dev

std :: current_exceptionはどのように機能しますか?

分類Dev

std :: optionは内部でどのように機能しますか?

分類Dev

std :: uncaught_exceptionはどのように機能しますか?

分類Dev

このstd :: is_classの実装はどのように機能しますか?

分類Dev

std :: pairのこのconst参照はどのように機能しますか?

分類Dev

libcxxのstd :: is_functionの実装はどのように機能しますか?

分類Dev

std :: find_last_ofは実際にどのように機能しますか?

分類Dev

std :: vector :: reservedは実際にどのように機能しますか?

分類Dev

libc ++のstd :: is_literal_typeはどのように機能しますか?

分類Dev

std :: great <>はセットでどのように機能しますか?

分類Dev

std :: piecewise_construct構文はどのように機能しますか?

分類Dev

std :: setwは文字列出力でどのように機能しますか?

分類Dev

C ++:std :: stringでヌル文字はどのように機能しますか?

分類Dev

std :: notify_all_at_thread_exitはどのように機能しますか?

分類Dev

std.string.toStringzはdlangでどのように機能しますか?

分類Dev

std :: array境界チェックはどのように機能しますか?

分類Dev

アロケータはstd :: vectorでどのように機能しますか?

分類Dev

std :: string length()関数はどのように機能しますか?

分類Dev

std :: unique_lockとstd :: condition_variableはどのように機能しますか

分類Dev

「std :: cout << std :: endl;」はどのように機能しますか コンパイル?

分類Dev

std :: make_sharedとstd :: make_uniqueは舞台裏でどのように機能しますか?

分類Dev

Eric Nieblerによるstd :: is_functionの実装はどのように機能しますか?

分類Dev

Eric Nieblerによるstd :: is_functionの実装はどのように機能しますか?

Related 関連記事

  1. 1

    std :: strlenは内部的にどのように機能しますか?

  2. 2

    std :: flushはどのように機能しますか?

  3. 3

    std :: tieはどのように機能しますか?

  4. 4

    std :: forwardはどのように機能しますか?

  5. 5

    std :: enable_ifはどのように機能しますか?

  6. 6

    `std :: mem :: swap`はどのように機能しますか?

  7. 7

    std :: current_exceptionはどのように機能しますか?

  8. 8

    std :: optionは内部でどのように機能しますか?

  9. 9

    std :: uncaught_exceptionはどのように機能しますか?

  10. 10

    このstd :: is_classの実装はどのように機能しますか?

  11. 11

    std :: pairのこのconst参照はどのように機能しますか?

  12. 12

    libcxxのstd :: is_functionの実装はどのように機能しますか?

  13. 13

    std :: find_last_ofは実際にどのように機能しますか?

  14. 14

    std :: vector :: reservedは実際にどのように機能しますか?

  15. 15

    libc ++のstd :: is_literal_typeはどのように機能しますか?

  16. 16

    std :: great <>はセットでどのように機能しますか?

  17. 17

    std :: piecewise_construct構文はどのように機能しますか?

  18. 18

    std :: setwは文字列出力でどのように機能しますか?

  19. 19

    C ++:std :: stringでヌル文字はどのように機能しますか?

  20. 20

    std :: notify_all_at_thread_exitはどのように機能しますか?

  21. 21

    std.string.toStringzはdlangでどのように機能しますか?

  22. 22

    std :: array境界チェックはどのように機能しますか?

  23. 23

    アロケータはstd :: vectorでどのように機能しますか?

  24. 24

    std :: string length()関数はどのように機能しますか?

  25. 25

    std :: unique_lockとstd :: condition_variableはどのように機能しますか

  26. 26

    「std :: cout << std :: endl;」はどのように機能しますか コンパイル?

  27. 27

    std :: make_sharedとstd :: make_uniqueは舞台裏でどのように機能しますか?

  28. 28

    Eric Nieblerによるstd :: is_functionの実装はどのように機能しますか?

  29. 29

    Eric Nieblerによるstd :: is_functionの実装はどのように機能しますか?

ホットタグ

アーカイブ