#include <iostream>
#include <compare>
using namespace std;
int main()
{
{
// Equal 연산자
int num0 = 10, num1(10);
if (num0 == num1)
cout << "num0 == num1" << endl; // 출력됨
// 아래의 실수들에 유의 한다.
num0 = 10, num1 = 11;
// if 문 내부가 11로 평가되고 11은 true로 평가되기 때문에 num0과 num1이 달라도 무조건 실행이 된다.
if (num0 = num1)
cout << "num0(10) = num1(11)" << endl; // 출력됨
num0 = 0, num1 = 0;
// if 문 내부가 0으로 평가되고 0은 false로 평가되기 때문에 num0과 num1이 같아도 실행이 안 된다.
if (num0 = num1)
cout << "num0(0) = num1(0)" << endl; // 출력되지 않음
}
{
// Not Equal 연산자
int num0 = 0, num1(0);
if (num0 != num1)
cout << "num0(0) != num1(0)" << endl; // 출력되지 않음
num0 = 0, num1 = 1;
if (num0 != num1)
cout << "num0(0) != num1(1)" << endl; // 출력됨
}
{
// Greater Than 연산자
int num0 = 0, num1(0);
if (num0 > num1)
cout << "num0(0) > num1(0)" << endl; // 출력되지 않음
num0 = 1, num1 = 0;
if (num0 > num1)
cout << "num0(1) > num1(0)" << endl; // 출력됨
}
{
// Greater Than or Equal 연산자
int num0 = 0, num1(0);
if (num0 >= num1)
cout << "num0(0) >= num1(0)" << endl; // 출력됨
num0 = 1, num1 = 0;
if (num0 >= num1)
cout << "num0(1) >= num1(0)" << endl; // 출력됨
}
{
// Less Than 연산자
int num0 = 0, num1(0);
if (num0 < num1)
cout << "num0(0) < num1(0)" << endl; // 출력되지 않음
num0 = 0, num1 = 1;
if (num0 < num1)
cout << "num0(0) < num1(1)" << endl; // 출력됨
}
{
// Less Than or Equal 연산자
int num0 = 0, num1(0);
if (num0 <= num1)
cout << "num0(0) <= num1(0)" << endl; // 출력됨
num0 = 0, num1 = 1;
if (num0 <= num1)
cout << "num0(0) <= num1(1)" << endl; // 출력됨
}
{
// SpaceShip 연산자
// C++20 에서 지원. 프로젝트 속성에서 C++ 언어 표준 변경 필요
cout.setf(ios_base::boolalpha);
// <=> 의 결과를 0과 비교할 수 있다.
// 0과 비교해서 0과 같으면 <=>의 좌항, 우항이 같다.
// 0과 비교해서 0보다 크면 좌항이 우항보다 크다.
// 0과 비교해서 0보다 작으면 좌항이 우항보다 작다.
cout << ((1 <=> 1) == 0) << endl; // true
cout << ((2 <=> 1) > 0) << endl; // true
cout << ((1 <=> 2) < 0) << endl; // true
cout << is_eq(1 <=> 1) << endl; // true
cout << is_gt(2 <=> 1) << endl; // true
cout << is_lt(1 <=> 2) << endl; // true
cout << is_gteq(2 <=> 1) << endl; // true
cout << is_lteq(1 <=> 2) << endl; // true
cout << typeid(1 <=> 1).name() << endl; // std::strong_ordering
cout << typeid(1 <=> 1.0).name() << endl; // std::partial_ordering
}
}
연산자 | 설명 | 예시 | 결과 |
---|---|---|---|
== | 두 값이 같은지 비교 | num0 == num1 | 같으면 true |
!= | 두 값이 다른지 비교 | num0 != num1 | 다르면 true |
> | 좌항이 우항보다 큰지 비교 | num0 > num1 | 크면 true |
>= | 좌항이 우항보다 크거나 같은지 비교 | num0 >= num1 | 크거나 같으면 true |
< | 좌항이 우항보다 작은지 비교 | num0 < num1 | 작으면 true |
<= | 좌항이 우항보다 작거나 같은지 비교 | num0 <= num1 | 작거나 같으면 true |
<=> | SpaceShip 연산자 (C++20) | num0 <=> num1 | 비교 결과 반환 |
is_eq | SpaceShip 연산자 결과가 같은지 비교 | is_eq(num0 <=> num1) | 같으면 true |
is_gt | SpaceShip 연산자 결과가 큰지 비교 | is_gt(num0 <=> num1) | 크면 true |
is_lt | SpaceShip 연산자 결과가 작은지 비교 | is_lt(num0 <=> num1) | 작으면 true |
is_gteq | SpaceShip 연산자 결과가 크거나 같은지 비교 | is_gteq(num0 <=> num1) | 크거나 같으면 true |
is_lteq | SpaceShip 연산자 결과가 작거나 같은지 비교 | is_lteq(num0 <=> num1) | 작거나 같으면 true |
Equal (==
) 연산자:
if (num0 == num1)
Not Equal (!=
) 연산자:
if (num0 != num1)
Greater Than (>
) 연산자:
if (num0 > num1)
Greater Than or Equal (>=
) 연산자:
if (num0 >= num1)
Less Than (<
) 연산자:
if (num0 < num1)
Less Than or Equal (<=
) 연산자:
if (num0 <= num1)
SpaceShip (<=>
) 연산자 (C++20):
auto result = num0 <=> num1;
std::strong_ordering
, std::weak_ordering
, std::partial_ordering
중 하나입니다.함수 | 설명 |
---|---|
is_eq(x) | x가 0과 같으면 true |
is_gt(x) | x가 0보다 크면 true |
is_lt(x) | x가 0보다 작으면 true |
is_gteq(x) | x가 0보다 크거나 같으면 true |
is_lteq(x) | x가 0보다 작거나 같으면 true |