2023년 6월 2일 금요일

[C++ 20] Study 003 - switch statement, enum class 범위 지정, 3방향 비교 연산자

이 글 부터는 html로 작성하지 않고 코드를 대충 쓸 예정이다. 속도가 안 나온다.

                                                                                    
The code will be writeen by courier style
                                                                                    

일단 작성하고 나서 마지막에 코드형식을 바꾸도록 하자.

switch 문에 지정할 수 있는 표현식은 결괏값이 정수 타입이거나, 정수 타입으로 변환할 수 있는 타입이거나, 열거 타입이거나, 강타입 열거타입이어야 한다.

enum class mode { a, b, c };

mode md { a };
switch (md) {
    using enum mode;
    case a:
        // do something;
        [[fallthrough]]
        /* 컴파일러가 경고문을 띄우지 않게 함. 의도적인 fallthrough 임을 컴파일러에게 알린다. 어트리뷰트 중 하나임. */
    case b:
    case c:
        // do something;
        break;
}

위와 같이 using enum을 switch 문 안에서만 사용하도록 할 수 있다. 또한 switch 문에서도 초기자를 사용할 수 있다.

다음으로 3방향 비교 연산자(three-way comparison operator)에 대해 알아보자. <=> 로 표현되는 이 연산자는 표현식의 평가 결과가 같은지, 큰지, 작은지 알려준다. 정수 타입의 경우 strong_ordering, 부동소수점 타입의 경우 partial_ordering, 직접 정의한 타입에 대해 weak_ordering이 있다. 예시는 다음과 같다.

int i { 1 };
strong_ordering result { i <=> 0 };
if (result == strong_ordering::equal) { cout << "equal" << endl; };
if (result == strong_ordering::greater) { cout << "greater" << endl; };
if (result == strong_ordering::less) { cout << "less" << endl; };

named comparison function으로 비교결과를 알 수도 있다.

int i { 1 };
strong_ordering result { i <=> 0 };
if (is_eq(result)) { cout << "equal" << endl; };
if (is_gt(result)) { cout << "greater" << endl; };
if (is_lt(result)) { cout << "less" << endl; };



댓글 없음:

댓글 쓰기