Why have comparison operators been removed from standard library containers in C++ 20?

前端 未结 1 882
一整个雨季
一整个雨季 2021-02-20 15:10

I was browsing cppreference and saw that vector\'s comparison operations have been removed in C++20, and the spaceship operator (<=>) has been in

1条回答
  •  清歌不尽
    2021-02-20 15:32

    If you continue to browse on the reference site a little, you might come to the section on default comparisons, which simply states that:

    In brief, a class that defines operator<=> automatically gets compiler-generated operators <, <=, >, and >=.

    So, if the "spaceship" operator exists for a class, the compiler will auto-generate the remaining comparison operators using the result of the <=> operator.

    Note that the == operator is not generated (even though it should be possible), but std::vector keeps an overload of operator==.


    As for:

    will C++ 20 start giving errors on older codes ?

    No, it will not.

    When you build with a C++20 compiler, the standard library used with it should also be made for C++20 and thus implement the <=> operator, which will then be used as explained above.

    However, if you use a C++20 compiler to build with an older standard library, that older standard library will still have the older comparison operators implemented.

    0 讨论(0)
提交回复
热议问题