Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do we need the spaceship <=> operator in C++?

Tags:

Why do we need such an operator in C++ and how is it useful in modern C++ programming? Any real world code examples where this can be applied will help.

This question is geared to understand the practical application in real world without reading wordy proposal from Herb Sutter. No offense to the proposal though.

like image 378
Ram Avatar asked Apr 04 '18 22:04

Ram


People also ask

What is spaceship operator used for?

In PHP 7, a new feature, spaceship operator has been introduced. It is used to compare two expressions. It returns -1, 0 or 1 when first expression is respectively less than, equal to, or greater than second expression.

What does <=> mean in Ruby?

It's a general comparison operator. It returns either a -1, 0, or +1 depending on whether its receiver is less than, equal to, or greater than its argument.

What is three-way comparison operator C++?

The C++20 three-way comparison operator <=> (commonly nicknamed the spaceship operator due to its appearance) compares two items and describes the result. It's called the three-way comparison because there are five possible results: less, equal, equivalent, greater, and unordered.


1 Answers

I'll give you three points of motivation, just off the top of my head:

  1. It's the common generalization of all other comparison operator (for totally-ordered domains): >, >=, ==, <=, < . Using <=> (spaceship), you can implement each of these other operations in a completely generic way.
  2. For strings, it's equivalent to the good old strcmp() function from the C standard library. So - useful for lexicographic order checks, such as data in vectors or lists or other ordered containers.
  3. For integral numbers, it's what the hardware does anyway: On x86 or x86_64 Comparing a and b (CMP RAX, RBX) is basically like subtracting (SUB RAX, RBX) except that RAX doesn't actually change, only the flags are affected, so you can use "jump on equal/not equal/greater than/lesser than/etc." (JE/JNE/JGT/JLT etc.) as the next instruction. CMP should be thought of as a "spaceship compare".
like image 138
einpoklum Avatar answered Jan 22 '23 06:01

einpoklum