C++ named requirements: NullablePointer (since C++11)
해당 타입이 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 |
효과는 ! ( p == q ) 임 |
||||
|
p
==
np
np == p |
효과는 ( p == Type ( ) ) 임 |
||||
|
p
!
=
np
np ! = p |
효과는 ! ( 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 으로의 문맥적 변환 가능성이 구현체의 기대를 반영하기에 너무 약함 | 요구 사항 강화됨 |