Conditional Operator : \(\texttt{? :}\)
조건 연산자 (3항 연산자)
- 표현식을 평가하며 참일 경우 수행될 구문, False일 경우에 수행될 구문을 입력할 수 있게하는 연산자이다.
- 간단한 관계식이나 표현식의 값을 나타내는 데에 용이한 연산자이다.
(복잡한 코드는 \(\texttt{if else}\) 구문을 사용하는 것이 의도하는 바를 더 명확히 나타낼 수 있을것이다.)
- C++에서 3개의 Operand(피연산자)를 요구하는 유일한 연산자이다.
조건 연산자의 일반형
Expr1 ? Expr2 : Expr3 // Expr = Expression
- 표현식 \(\texttt{Expr1}\)이 참일 경우 \(\texttt{Expr2}\)를 실행하고, 거짓일 경우 \(\texttt{Expr3}\)를 실행한다.
Ex. 조건 연산자의 사용 예시
int val = a > b ? a : b;
// a가 b보다 크면 변수 val에 a를 대입,
// a가 b보다 크지 않다면 변수 val에 b를 대입하게 된다.
- \(\texttt{if else}\) 구문에 비해 형식은 간결하지만 명확성이 떨어진다.
- \(\texttt{if else}\) 구문과 조건 연산자의 가장 큰 차이는, 조건 연산자는 하나의 표현식을 만든다는 점이다.
(조건 연산자 수식은 그 자체로 하나의 값을 가진다.)
+ 조건 연산자는 남들이 코드의 목적을 쉽게 파악하지 못하도록 위장하기 위해 쓰이기도 한다.
Ex. 가독성이 떨어지는 조건 연산자 수식 예시
const char x[2][5] = {"Aaa ", "Ccc "};
const char* y = "Bbb ";
for (int i = 0; i < 3; i++)
cout << ((i < 2) ? !i ? x[i] : y : x[1]); // 해독할 수 없는 건 아니지만 가독성이 좋지 않다.
// 출력 결과 : Aaa Bbb Ccc