-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
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") 이렇게 괄호로 한 번 더 묶으면 된다고 하셨습니다. 연산자 우선순위 때문에 오류가 나는 거라고 하셨는데, 어떤 연산자들끼리 우선순위가 충돌하는 건지 궁금합니다.
답변을 작성해보세요.
2
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 의 연산자 - 위키백과 (링크) - '연산자 우선순위' 항목 참고
답변 1