🧼C, C++/기초및 입문
우주선 연산자 '<=>' 사용법 ( C++20 )
개발환경 >> Visual Studio 2022
언어 >> C++20
운영체제 >> Windows10
안녕하세요!!
이번에 C++20에서 새로나온 연산자인 "<=>" 이 연산자에 대한 설명과 사용법을 적어보겠습니다!
우선은 이 연산자의 정식명칭은 "SpaceShip (Three-way Comparison) operator"라고 합니다.
해석하자면 "우주선 연산자"입니다.
이 연산자는 (a <=> b) 라고 주어졌을때,
a와 b가 같은지, 다른지, a가큰지 b가 작은지등등 값의 대소와 값비교를 한번에 다 해버릴수가있습니다.
그리고 반환값이 좀 특이한데, 반환하는 녀석은 이녀석입니다.
struct strong_ordering {
static const strong_ordering less;
static const strong_ordering equal;
static const strong_ordering equivalent;
static const strong_ordering greater;
constexpr operator partial_ordering() const noexcept {
return {static_cast<_Compare_t>(_Value)};
}
constexpr operator weak_ordering() const noexcept {
return {static_cast<_Compare_t>(_Value)};
}
_NODISCARD friend constexpr bool operator==(const strong_ordering _Val, _Literal_zero) noexcept {
return _Val._Value == 0;
}
_NODISCARD friend constexpr bool operator==(strong_ordering, strong_ordering) noexcept = default;
_NODISCARD friend constexpr bool operator<(const strong_ordering _Val, _Literal_zero) noexcept {
return _Val._Value < 0;
}
_NODISCARD friend constexpr bool operator>(const strong_ordering _Val, _Literal_zero) noexcept {
return _Val._Value > 0;
}
_NODISCARD friend constexpr bool operator<=(const strong_ordering _Val, _Literal_zero) noexcept {
return _Val._Value <= 0;
}
_NODISCARD friend constexpr bool operator>=(const strong_ordering _Val, _Literal_zero) noexcept {
return _Val._Value >= 0;
}
_NODISCARD friend constexpr bool operator<(_Literal_zero, const strong_ordering _Val) noexcept {
return _Val > 0;
}
_NODISCARD friend constexpr bool operator>(_Literal_zero, const strong_ordering _Val) noexcept {
return _Val < 0;
}
_NODISCARD friend constexpr bool operator<=(_Literal_zero, const strong_ordering _Val) noexcept {
return _Val >= 0;
}
_NODISCARD friend constexpr bool operator>=(_Literal_zero, const strong_ordering _Val) noexcept {
return _Val <= 0;
}
_NODISCARD friend constexpr strong_ordering operator<=>(const strong_ordering _Val, _Literal_zero) noexcept {
return _Val;
}
_NODISCARD friend constexpr strong_ordering operator<=>(_Literal_zero, const strong_ordering _Val) noexcept {
return {static_cast<_Compare_t>(-_Val._Value)};
}
_Compare_t _Value;
};
"strong_ordering"이라는 구조체입니다.
그러면 사용법 바로 가시죠!
void SpaceShip() {
auto item = 5 <=> 4;
std::cout << std::boolalpha << std::is_lt(item);
}
int main() {
SpaceShip();
_getch();
}
다음은 우주선연산자를 사용한 기본적인 예시입니다.
std::is_lt는 "a <=> b" 에서 a가 b보다 작은가?? 를 물어보는 함수입니다.
한마디로 5가 4보다 크므로, 결과값은 "false"가 됩니다.
그러면 이러한 대소비교를 하기위한 함수를 모두 알려드리겠습니다!
// FUNCTION is_eq
_NODISCARD constexpr bool is_eq(const partial_ordering _Comp) noexcept {
return _Comp == 0;
}
// FUNCTION is_neq
_NODISCARD constexpr bool is_neq(const partial_ordering _Comp) noexcept {
return _Comp != 0;
}
// FUNCTION is_lt
_NODISCARD constexpr bool is_lt(const partial_ordering _Comp) noexcept {
return _Comp < 0;
}
// FUNCTION is_lteq
_NODISCARD constexpr bool is_lteq(const partial_ordering _Comp) noexcept {
return _Comp <= 0;
}
// FUNCTION is_gt
_NODISCARD constexpr bool is_gt(const partial_ordering _Comp) noexcept {
return _Comp > 0;
}
// FUNCTION is_gteq
_NODISCARD constexpr bool is_gteq(const partial_ordering _Comp) noexcept {
return _Comp >= 0;
}
차례대로 설명하자면,
std::is_eq => a == b 일시 참
std::is_neq => a != b 일시 참
std::is_lt => a < b 일시 참
std::is_lteq => a <= b 일시 참
std::is_gt => a > b 일시 참
std::is_gteq => a >= b 일시 참
네, 끝났습니다.
그러면 여기서 마치도록 하겠습니다!
안녕!!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'🧼C, C++ > 기초및 입문' 카테고리의 다른 글
소수점 반올림하는법 c++ (0) | 2021.08.14 |
---|---|
Devcpp에서 c++23 사용하기 Devcppで c++23を 使用する Using c++23 with Devcpp (0) | 2021.06.20 |
키로거 만들기 C++ (4) | 2021.01.29 |
표준 라이브러리 정리 <cstdlib> (stdlib.h) - C++ (C) (0) | 2021.01.14 |
C언어 기초 #3 if문과 연산자 (0) | 2021.01.13 |
댓글