인프런 커뮤니티 질문&답변
마지막 예제 질문
작성
·
291
·
수정됨
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
우선순위 때문으로 보입니다.
논리 연산자(&&, ||, !)의 우선순위가 비교 연산자(<, >, ==, 등)보다 낮다는 점을 기억해보세요.
따라서 논리 연산자가 비교 연산자보다 먼저 계산될 수 있기 때문에
조건식을 올바르게 해석되지 않는 것입니다.
가령 위 예제 코드에서
cout << (true && true) || false;는 다음과 같이 해석됩니다.
cout << (true && true)) || false;




