Namespaces
Variants

Logical operators

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

불린 연산의 결과를 반환합니다.

연산자 이름 구문 오버로드 가능 프로토타입 예시 ( 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 ) ;
참고 사항
  • 키워드 형태( and , or , not )와 기호 형태( && , || , ! )는 상호 교환하여 사용할 수 있습니다 ( 대체 표현법 참조).
  • 모든 내장 연산자는 bool 을 반환하며, 대부분의 사용자 정의 오버로드 bool 을 반환하여 사용자 정의 연산자가 내장 연산자와 동일한 방식으로 사용될 수 있습니다. 그러나 사용자 정의 연산자 오버로드에서는 모든 타입을 반환 타입으로 사용할 수 있습니다 ( void 포함).
  • 내장 연산자 && || 는 단락 평가를 수행하지만(결과가 첫 번째 피연산자 평가 후 알려지면 두 번째 피연산자를 평가하지 않음), 오버로드된 연산자는 일반 함수 호출처럼 동작하며 항상 두 피연산자를 모두 평가합니다.

목차

설명

논리 연산자 표현식의 형식은 다음과 같습니다

! rhs (1)
lhs && rhs (2)
lhs || rhs (3)
**참고**: 제시된 HTML 코드에는 번역이 필요한 일반 텍스트가 포함되어 있지 않습니다. 모든 내용이 HTML 태그, 속성, 코드 태그( ), C++ 연산자(!, &&, ||) 및 C++ 용어(lhs, rhs)로 구성되어 있어 번역 지침에 따라 원본을 그대로 유지했습니다.
1) 논리적 NOT
2) 논리 AND
3) 논리적 포함 OR

피연산자가 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++ 논리 연산자의 진리표를 보여주며, ` ` 태그 내의 C++ 키워드와 연산자는 번역하지 않고 원본 그대로 유지했습니다. 표의 구조와 HTML 태그도 완전히 보존되었습니다.
and a
true false
b true true false
false false false
**참고사항:** - 모든 HTML 태그와 속성은 그대로 유지되었습니다 - ` `, `
`, `` 태그 내부의 텍스트는 번역되지 않았습니다
- C++ 관련 용어(true, false, and 등)는 원문 그대로 보존되었습니다
- 표의 논리적 구조와 서식이 완벽하게 유지되었습니다
or a
true false
b true true true
false true false
**참고:** 주어진 지침에 따라 HTML 태그, 속성, 태그 내의 텍스트(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 + = b
a - = b
a * = b
a / = b
a % = b
a & = b
a | = b
a ^ = b
a <<= b
a >>= b

++ a
-- a
a ++
a --

+ a
- a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

! a
a && b
a || b

a == b
a ! = b
a < b
a > b
a <= b
a >= b
a <=> b

a [ ... ]
* a
& a
a - > b
a. b
a - > * b
a. * b

함수 호출

a ( ... )
콤마

a, b
조건부 연산자

a ? b : c
특수 연산자

static_cast 관련된 타입 간 변환을 수행
dynamic_cast 상속 계층 구조 내에서 변환을 수행
const_cast cv -한정자를 추가하거나 제거
reinterpret_cast 관련 없는 타입 간 변환을 수행
C-style cast static_cast , const_cast , 그리고 reinterpret_cast 의 혼합으로 타입 변환을 수행
new 동적 저장 기간을 가진 객체를 생성
delete new 표현식으로 생성된 객체를 파괴하고 획득한 메모리 영역을 해제
sizeof 타입의 크기를 조회
sizeof... pack 의 크기를 조회 (C++11부터)
typeid 타입의 정보를 조회
noexcept 표현식이 예외를 발생시킬 수 있는지 확인 (C++11부터)
alignof 타입의 정렬 요구사항을 조회 (C++11부터)

C 문서 for Logical operators