Logical operators
불린 연산의 결과를 반환합니다.
| 연산자 이름 | 구문 | 오버로드 가능 | 프로토타입 예시 ( class T 용) | |
|---|---|---|---|---|
| 클래스 정의 내부 | 클래스 정의 외부 | |||
| 논리 부정 |
not a
! a |
가능 | bool T :: operator ! ( ) const ; | bool operator ! ( const T & a ) ; |
| 논리 AND |
a and b
a && b |
가능 | bool T :: operator && ( const T2 & b ) const ; | bool operator && ( const T & a, const T2 & b ) ; |
| 논리 OR |
a or b
a || b |
가능 | bool T :: operator || ( const T2 & b ) const ; | bool operator || ( const T & a, const T2 & b ) ; |
|
||||
목차 |
설명
논리 연산자 표현식의 형식은 다음과 같습니다
!
rhs
|
(1) | ||||||||
lhs
&&
rhs
|
(2) | ||||||||
lhs
||
rhs
|
(3) | ||||||||
), C++ 연산자(!, &&, ||) 및 C++ 용어(lhs, rhs)로 구성되어 있어 번역 지침에 따라 원본을 그대로 유지했습니다.
피연산자가
bool
이 아닌 경우,
bool에 대한 문맥적 변환
을 사용하여
bool
로 변환됩니다: 어떤 임시로 생성된
t
에 대해 선언
bool t(arg)
이 유효할 때만 올바른 형식을 가집니다.
결과는 bool prvalue입니다.
내장 논리 NOT 연산자의 경우, 피연산자가 false 이면 결과는 true 입니다. 그렇지 않으면 결과는 false 입니다.
내장 논리 AND 연산자의 경우, 두 피연산자가 모두 true 일 때 결과는 true 입니다. 그렇지 않으면 결과는 false 입니다. 이 연산자는 단락 평가 를 수행합니다: 첫 번째 피연산자가 false 인 경우, 두 번째 피연산자는 평가되지 않습니다.
내장 논리 OR 연산자의 경우, 첫 번째 피연산자 또는 두 번째 피연산자(또는 둘 다)가 true 이면 결과는 true 입니다. 이 연산자는 단락 평가(short-circuiting)를 수행합니다: 첫 번째 피연산자가 true 이면 두 번째 피연산자는 평가되지 않습니다.
참고로 비트 논리 연산자 는 단락 평가를 수행하지 않습니다.
결과
| a | true | false |
|---|---|---|
| ! a | false | true |
` 태그 내의 C++ 키워드와 연산자는 번역하지 않고 원본 그대로 유지했습니다. 표의 구조와 HTML 태그도 완전히 보존되었습니다.
| and | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | false |
| false | false | false | |
`, `
`, `
| or | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | true |
| false | true | false | |
태그 내의 텍스트(C++ 키워드인 "or", "a", "b", "true", "false")는 번역하지 않고 원본을 유지했습니다. 표의 논리 구조는 완전히 보존되었습니다.
사용자 정의 연산자에 대한 오버로드 해결 에서 다음의 내장 함수 시그니처들이 오버로드 해결에 참여합니다:
|
bool
operator
!
(
bool
)
|
||
|
bool
operator
&&
(
bool
,
bool
)
|
||
|
bool
operator
||
(
bool
,
bool
)
|
||
예제
#include <iostream> #include <sstream> #include <string> int main() { int n = 2; int* p = &n; // 포인터는 bool로 변환 가능 if ( p && *p == 2 // "p &&" 이후에는 "*p"를 안전하게 사용 가능 || !p && n != 2) // ||는 &&보다 우선순위가 낮음 std::cout << "true\n"; // 스트림도 bool로 변환 가능 std::stringstream cin; cin << "3...\n" << "2...\n" << "1...\n" << "quit"; std::cout << "Enter 'quit' to quit.\n"; for (std::string line; std::cout << "> " && std::getline(cin, line) && line != "quit";) std::cout << line << '\n'; }
출력:
true Enter 'quit' to quit. > 3... > 2... > 1... >
표준 라이브러리
operator&&
와
operator||
의 단락 평가(short-circuiting) 특성이 오버로드에는 적용되지 않으며, 불린 의미론을 가진 타입이 흔하지 않기 때문에, 표준 라이브러리 클래스 중에서는 다음 두 가지만이 이러한 연산자들을 오버로드합니다:
|
단항 산술 연산자를 valarray의 각 요소에 적용합니다
(
std::valarray<T>
의
public member function)
|
|
|
두 valarray의 각 요소에, 또는 valarray와 값에 이항 연산자를 적용합니다
(function template) |
|
|
오류 발생 여부를 확인합니다 (
fail()
의 동의어)
(
std::basic_ios<CharT,Traits>
의
public member function)
|
참고 항목
|
함수 객체 구현:
x
&&
y
(클래스 템플릿) |
|
|
함수 객체 구현:
x
||
y
(클래스 템플릿) |
|
|
함수 객체 구현:
!
x
(클래스 템플릿) |
| 일반 연산자 | ||||||
|---|---|---|---|---|---|---|
| assignment |
increment
decrement |
arithmetic | logical | comparison |
member
access |
other |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
...
]
|
함수 호출
a ( ... ) |
|
콤마
a, b |
||||||
|
조건부 연산자
a ? b : c |
||||||
| 특수 연산자 | ||||||
|
static_cast
관련된 타입 간 변환을 수행
|
||||||
|
C 문서
for
Logical operators
|