강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김민진님의 프로필 이미지
김민진

작성한 질문수

홍정모의 따라하며 배우는 C++

3.4 조건 연산자 우선순위

작성

·

280

·

수정됨

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 의 연산자 - 위키백과 (링크) - '연산자 우선순위' 항목 참고

김민진님의 프로필 이미지
김민진

작성한 질문수

질문하기