While I was trying to learn about C++ operators, I stumbled upon a strange comparison operator on cppreference.com,* in a table that looked like this:
"Well, if these are common operators in C++, I better learn them", I thought. But all my attempts to elucidate this mystery were unsuccessful. Even here, on Stack Overflow I had no luck in my search.
And if there is, what does this operator do exactly?
* In the meantime cppreference.com updated that page and now contains information about the<=>
operator.
This is called the three-way comparison operator.
According to the P0515 paper proposal:
There’s a new three-way comparison operator,
<=>
. The expressiona <=> b
returns an object that compares<0
ifa < b
, compares>0
ifa > b
, and compares==0
ifa
andb
are equal/equivalent.To write all comparisons for your type, just write
operator<=>
that returns the appropriate category type:
Return an _ordering if your type naturally supports
<
, and we’ll efficiently generate<
,>
,<=
,>=
,==
, and!=
; otherwise return an _equality, and we’ll efficiently generate == and !=.Return strong if for your type
a == b
impliesf(a) == f(b)
(substitutability, where f reads only comparison-salient state accessible using the nonprivate const interface), otherwise return weak.
The cppreference says:
The three-way comparison operator expressions have the form
lhs <=> rhs (1)
The expression returns an object that
- compares
<0
iflhs < rhs
- compares
>0
iflhs > rhs
- and compares
==0
iflhs
andrhs
are equal/equivalent.