Namespaces
Variants

C++ named requirements: NullablePointer (since C++11)

From cppreference.net
C++ named requirements

해당 타입이 std::nullptr_t 객체와 비교 가능한 포인터와 유사한 객체임을 지정합니다.

목차

요구사항

해당 타입은 다음의 모든 요구사항을 충족해야 합니다:

**참고:** 요청하신 대로 C++ 관련 용어(EqualityComparable, DefaultConstructible, CopyConstructible, CopyAssignable, Swappable, Destructible)는 원문 그대로 유지하였으며, HTML 태그와 속성도 모두 보존하였습니다. 번역할 텍스트가 C++ 개념 이름뿐이어서 모든 항목이 원문과 동일하게 유지되었습니다.

또한, 해당 타입의 값 초기화된 객체는 반드시 그 타입의 널 값을 생성해야 합니다. 이 널 값은 오직 자기 자신과만 동등해야 합니다. 해당 타입의 기본 초기화는 indeterminate 또는 erroneous (since C++26) 값을 가질 수 있습니다.

해당 타입의 값은 문맥적으로 변환 가능 해야 bool 합니다. 이 변환의 효과는 값이 해당 null 값과 동등할 경우 false 를 반환하고, 그렇지 않을 경우 true 를 반환합니다.

이 타입이 수행하는 어떤 연산도 예외를 던지지 않을 수 있습니다.

해당 타입은 다음의 추가 표현식을 만족해야 하며, 주어진 두 값 p q 가 해당 타입이고, np std::nullptr_t 타입의 값(possibly const-qualified)일 때:

선언 효과
Type p ( np ) ;

Type p = np ;

이후, p nullptr 와 동등함
표현식 효과
Type ( np ) nullptr 와 동등한 임시 객체
p = np Type& 를 반환해야 하며, 이후 p nullptr 와 동등함
p ! = q

타입과 값이 BooleanTestable 요구사항을 충족함

(C++20 이전)

decltype ( p ! = q ) boolean-testable 를 모델링함

(C++20 이후)

효과는 ! ( p == q )

p == np

np == p


두 표현식의 타입과 값이 BooleanTestable 요구사항을 충족함

(C++20 이전)

decltype ( p == np ) decltype ( np == p ) 각각 boolean-testable 를 모델링함

(C++20 이후)

효과는 ( p == Type ( ) )

p ! = np

np ! = p


두 표현식의 타입과 값이 BooleanTestable 요구사항을 충족함

(C++20 이전)

decltype ( p ! = np ) decltype ( np ! = p ) 각각 boolean-testable 를 모델링함

(C++20 이후)

효과는 ! ( p == np )

참고 사항

역참조( operator * 또는 operator - > )는 NullablePointer 타입에 대해 필요하지 않다는 점에 유의하십시오. 이러한 요구사항을 충족하는 최소한의 타입은 다음과 같습니다.

class handle
{
    int id = 0;
public:
    handle() = default;
    handle(std::nullptr_t) {}
    explicit operator bool() const { return id != 0; }
    friend bool operator==(handle l, handle r) { return l.id == r.id; }
    friend bool operator!=(handle l, handle r) { return !(l == r); }
    // 또는 C++20부터는 기본 operator==만 사용 가능
};

표준 라이브러리

다음 타입들은 NullablePointer 를 만족합니다:

다음 유형들은 표준 라이브러리 구성 요소와 상호작용하기 위해 NullablePointer 요구사항을 충족해야 합니다:

  • 모든 Allocator 타입 X 의 멤버 타입들 X::pointer , X::const_pointer , X::void_pointer X::const_void_pointer .
  • std::unique_ptr 의 멤버 타입 pointer .
(C++23부터)

결함 보고서

다음 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2114
( P2167R3 )
C++11 bool 으로의 문맥적 변환 가능성이 구현체의 기대를 반영하기에 너무 약함 요구 사항 강화됨