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);
}
댓글