강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

jbw217님의 프로필 이미지
jbw217

작성한 질문수

홍정모의 따라하며 배우는 C++

3.6 논리 연산자 logical operators

마지막 예제 질문

작성

·

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;
jbw217님의 프로필 이미지
jbw217

작성한 질문수

질문하기