728x90
C++에서 비교 연산자를 만들 때 <, <=, ==, !=, >=, > 등을 모두 만들어야하는 상황이 있었다.
이것을 한번에 만들어주는 거라고 보면된다.
쉽게 보면 아래와 같이 기존에 6개의 Operator를 만들어야했지만, 1개만 만들면 자동으로 모두 사용할 수 있게 된다.
struct MyInt
{
MyInt(int value) : _value(value) { }
// 기존 문법
bool operator<(const MyInt& rhs) const { return _value < rhs._value; }
bool operator<=(const MyInt& rhs) const { return _value <= rhs._value; }
bool operator>(const MyInt& rhs) const { return _value > rhs._value; }
bool operator>=(const MyInt& rhs) const { return _value >= rhs._value; }
bool operator==(const MyInt& rhs) const { return _value == rhs._value; }
bool operator!=(const MyInt& rhs) const { return _value != rhs._value; }
// C++ 20 삼항 비교 연산자
auto operator<=>(const MyInt& rhs) const = default;
int _value;
};
아래와 같이 문자열 비교와 동일한 결과가 나오게 된다.
int main()
{
int a1 = 100;
int b1 = 200;
auto ret = (a1 <=> b1);
if (ret < 0)
cout << "a < b" << endl;
else if (ret == 0)
cout << "a == b" << endl;
else if (ret > 0)
cout << "a > b" << endl;
return 0;
}
728x90
'Basic Programming > C++ 20' 카테고리의 다른 글
C++20 - consteval (1) | 2023.12.27 |
---|---|
C++20 - 지정된 초기화 (Designated Initialization) (1) | 2023.12.17 |
C++20 - Coroutine (1) | 2023.12.17 |
C++20 - Ranges (0) | 2023.12.10 |
C++20 - Module (0) | 2023.12.10 |