C++ именованные требования: NullablePointer (с C++11)
Указывает, что тип является объектом, похожим на указатель, который может быть сравнен с std::nullptr_t объектами.
Требования
Тип должен удовлетворять всем следующим требованиям:
| (до C++23) |
| (с C++23) |
Кроме того, инициализированный значением объект типа должен производить нулевое значение этого типа. Это нулевое значение должно быть эквивалентно только самому себе. Инициализация по умолчанию типа может иметь неопределенное значение.
Объект типа должен быть контекстно преобразуем к bool. Эффект этого преобразования возвращает false , если значение эквивалентно его нулевому значению, и true в противном случае.
Ни одна из операций, выполняемых этим типом, не должна выбрасывать исключения.
Тип должен удовлетворять следующим дополнительным выражениям, учитывая два значения p и q того же типа, и что np - значение типа std::nullptr_t (возможно, const квалифицировано):
| Выражение | Эффекты | ||||
|---|---|---|---|---|---|
Type p(np);
| После этого p эквивалентно nullptr |
||||
Type(np) | Временный объект, эквивалентный nullptr |
||||
p = np | Должно вернуть Type&, а после этого p эквивалентно nullptr |
||||
p != q |
Эффект - |
||||
p == np
|
Эффект - |
||||
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); }
// or only a defaulted operator== (since C++20)
};Стандартная библиотека
Следующие типы должны удовлетворять NullablePointer:
- Члены типов
X::pointer,X::const_pointer,X::void_pointerиX::const_void_pointerкаждого типа AllocatorX. - Член типа
X::pointerтипаstd::unique_ptr. - Тип
std::exception_ptr.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/NullablePointer