• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

3.4 조건 연산자 우선순위

23.10.28 19:09 작성 23.10.28 21:44 수정 조회수 162

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님의 프로필

Soobak

2023.10.28

안녕하세요, 답변 도우미 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 의 연산자 - 위키백과 (링크) - '연산자 우선순위' 항목 참고