인프런 커뮤니티 질문&답변
3.4 조건 연산자 우선순위
작성
·
283
·
수정됨
1
#include <iostream>
using namespace std;
int main() {
int x = 5;
cout << (x % 2 == 0) ? "even" : "odd" << endl;
}안녕하세요. (x % 2 == 0) ? "even" : "odd"로 쓰면 컴파일 오류가 나는데, 이를 해결하려면 ((x % 2 == 0) ? "even" : "odd") 이렇게 괄호로 한 번 더 묶으면 된다고 하셨습니다. 연산자 우선순위 때문에 오류가 나는 거라고 하셨는데, 어떤 연산자들끼리 우선순위가 충돌하는 건지 궁금합니다.
답변 1
2
안녕하세요, 답변 도우미 Soobak 입니다.
<< 연산자와 ?: 사이의 우선순위 차이 때문입니다.
<< 연산자의 우선순위는 ?: 연산자의 우선순위보다 높습니다.
따라서, 다음의 코드
cout << (x % 2 == 0) ? "even" : "odd" << endl; 은
(cout << (x % 2 == 0)) ? "even" : "odd" << endl; 과 같이 해석됩니다.
이 때, (cout << (x % 2 == 0)) 의 반환값 자체가 삼항연산자 ?: 의 조건식에 들어가게 되므로 컴파일 에러가 발생하는 것입니다.
따라서, cout << ((x % 2 == 0) ? "even" : "odd") << endl; 과 같이 괄호를 통해 우선순위를 명확히 해주어야 합니다.
참고 자료 링크를 첨부드립니다.
질문/답변 - conditional operator 우선순위 질문 (링크)
C와 CPP 의 연산자 - 위키백과 (링크) - '연산자 우선순위' 항목 참고





