플로렌스라는 개발자

C++ 생각보다 많이 모르는 삼항 연산자의 특성

프로그래밍/C++ 2019.11.06 댓글 0 Plorence

목차

    https://docs.microsoft.com/ko-kr/cpp/cpp/conditional-operator-q?view=vs-2019

    해당 문서만 봐도 해당 게시글에서 설명하는 것은 다봤다고 해도 무방합니다.

    exp1 ? exp2 : exp3;

    라는 삼항 연산자가 있을 때..

     

    exp2과 exp3의 타입이 동일하다면 lvalue이다.

    당연히 exp2와 exp3도 lvalue일때를 말합니다.

    char A = 'a';
    char B = 'A';
    (1 ? A : B) = 'B';

    C는 컴파일 에러가 발생하고 C++에서는 이것이 허용됩니다.

     

    exp2과 exp3의 타입이 다르다면 형 변환이 일어난다.

    제가 삼항 연산자를 더 알아본 이유입니다.

    #include <iostream>
    int main(void) {
           char Result = 'A';
           std::cout << (1? Result : int(Result));
    }

    해당 코드에서 의도되지 않은 문제가 있었는데, 삼항연산자가 참이어도 정수로 출력되는 것입니다.

    왜그러냐면 char, int가 되므로 변환이 일어나면서 조건이 참이든 거짓이든 결과값은 int가 됩니다.

     

    만약 서로 동일한 타입을 가질 수 없는 경우에는 컴파일 에러가 발생합니다.

    #include <iostream>
    class A
    {
    };
    class B {
    };
    int main(void) {
           A a;
           B b;
           A C = (1 ? a : b);
    }

    댓글

    0