operator_logical — 논리 연산자
operator_logical — 논리 연산자 (Logical operators)
**논리 연산자(logical operator)**는 &&(AND), ||(OR), !(NOT)로 부울 논리 연산을 수행해요.
조건을 조합할 때 사용해요. &&와 ||는 **단락 평가(short-circuit)**를 지원해, 결과가 정해지는 즉시 나머지를 평가하지 않아요.
출처: cppreference
본문
논리 연산자는 부울 값을 조합해요.
연산자
!x— 논리 NOT (x가 거짓이면 참)a && b— 논리 AND (둘 다 참이면 참)a || b— 논리 OR (하나라도 참이면 참)
동작
bool b1 = true && false; // false
bool b2 = true || false; // true
bool b3 = !true; // false
단락 평가
&&와 ||는 단락 평가를 해요. 결과가 정해지면 나머지 피연산자를 평가하지 않아요.
a && f()—a가 false면f()는 호출되지 않아요.a || f()—a가 true면f()는 호출되지 않아요.
if (p != nullptr && p->value > 0) { } // p 가 null 이면 p->value 접근 안 함
if (x != 0 && 100 / x > 1) { } // x 가 0 이면 나눗셈 안 함
이런 특성은 포인터 널 검사 등에 안전하게 쓰여요.
논리 연산자의 결과
&&와 ||는 bool을 반환해요. 조건 문맥에서 자주 쓰여요.
값이 bool이 아닌 경우
피연산자는 문맥적으로 bool로 변환돼요. 정수를 조건처럼 쓰면 0이 아님 = 참.
int count = 5;
if (count && count > 2) { } // count != 0 은 참
오버로딩 주의
클래스에서 &&, ||를 오버로드하면 단락 평가를 잃어요 (둘 다 항상 평가됨). 그래서 일반적으로 오버로드하지 않는 것이 권장돼요.
비트 연산자와의 차이
- 논리 연산자
&&,||,!— 부울 판단, 단락 평가 - 비트 연산자
&,|,~— 비트 단위 연산, 단락 없음
bool r = a & b; // 비트 AND (단락 없음)
bool s = a && b; // 논리 AND (단락 있음)
노트 (Notes)
- 단락 평가 덕분에 안전하고 효율적인 조건 조합이 가능해요.
- 논리 연산자 결과는 항상
bool이에요. - 드 모르간 법칙 등으로 조건을 정리할 수 있어요.