• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

cout << (bValue ? 1 : 0 ) <<"입니다"; 라는 코드에서 삼항연산자에 괄호 유무 차이에 따른 오류 질문입니다.

23.04.19 16:08 작성 조회수 509

1

cout << (bValue ? 1 : 0 ) <<"입니다"; 라는 코드에서 삼항연산자에 괄호 유무 차이에 따른 오류 질문입니다.

cout << bValue ? 1 : 0 라고 입력시 잘 동작하지만 삼항연산자 이후 endl이나 추가적인 문구를 추가해보니 오류가 발생합니다. 하지만 괄호로 묶었을 땐 정상 동작을 하는것을 보고 왜 괄호가 필요한지 의문이 생겨서 질문 남깁니다.

답변 1

답변을 작성해보세요.

3

Soobak님의 프로필

Soobak

2023.04.19

안녕하세요, 답변 도우미 Soobak 입니다. 🍉

우선, 질문주신 강의 2.2 정수형(Integers) 에서는 해당 내용이 나와있지 않습니다.
의문이 생기신 학습 강의에서 질문을 해주시면, 제가 더 명확히 도움을 드릴 수 있을 것 같습니다.

답변을 드리자면, 연산자의 우선순위 때문입니다. 해당 내용에 대해서는 강의 3.1 연산자 우선순위와 결합 법칙 에서 학습하시게 됩니다. 내용이 궁금하시다면, 해당 강의의 4:48 부분에 나와 있는 연산자 우선순위 표를 참고하시면 도움이 되실 것 같습니다.

예시를 들어 설명드리면 다음과 같습니다.

cout << bValue ? 1 : 0 << endl;

위 코드에서 스트림 출력을 위해 사용하는 연산자 << 은 삼항 연산자보다 우선순위가 높습니다.
따라서, 마치 (cout << bValue) ? 1 : 0 << endl 처럼 작동하며, (cout << bValue) 가 삼항 연산자의 조건 식에 들어가게 됩니다. 즉, 뒷 부분의 << endl 부분이 정상적으로 작동하지 않는 것입니다.

따라서,

cout << (bValue ? 1 : 0) << endl;

과 같이 괄호를 통해 << 연산자와 삼항 연산자 사이의 우선순위를 명확하게 해주어야 하는 것입니다.