• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

마지막 예제 질문

23.02.14 18:39 작성 23.02.14 18:39 수정 조회수 189

0

#include <iostream>

using namespace std;

int main() {

cout << ((true && true) || false) << endl;

cout << ((false && true) || true) << endl;

cout << ((false && true) || false || true) << endl;

cout << ((14 > 13 || 2 > 1) && (9 > 1)) << endl;

cout << !(2314123 > 2 || 123123 > 2387) << endl;

return 0;

}

 

마지막 예제에서, 위와 같이 조건식을 통째로 괄호로 싸주거나, 끝에 endl없이 출력해야 빌드가 되네요.

예를들어,

cout<<(true&&true)||false<<endl;

은 error C2563: mismatch in formal parameter list

에러가 뜹니다.

cout << ((true && true) || false) << endl;

또는

cout << (true && true) || false;

로 코딩해야 빌드가 돼요.

현상만 보고 추정하기로는 endl함수가 1개의 인자만 받아야해서 그런거 같은데 맞나요?? 에러 내용이 정확히 뭔지 설명 부탁드려요

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2023.02.16

우선순위 때문으로 보입니다.

논리 연산자(&&, ||, !)의 우선순위가 비교 연산자(<, >, ==, 등)보다 낮다는 점을 기억해보세요.

따라서 논리 연산자가 비교 연산자보다 먼저 계산될 수 있기 때문에

조건식을 올바르게 해석되지 않는 것입니다.

가령 위 예제 코드에서

cout << (true && true) || false;

는 다음과 같이 해석됩니다.

cout << (true && true)) || false;