标准库标头 <optional> (C++17)

来自cppreference.com
< cpp‎ | header


 
 
标准库头
 

此头文件是通用工具库的一部分。

目录

包含

(C++20)
三路比较运算符支持[编辑]

(C++17)
可能或可能不保有一个对象的包装器
(类模板)[编辑]
指示进行了到不含值的 optional 的有检查访问的异常
(类)[编辑]
std::optional 的散列支持
(类模板特化)[编辑]
(C++17)
不含值的 std::optional 的指示器
(类)[编辑]
前置声明
在标头 <functional> 定义
(C++11)
散列函数对象
(类模板)[编辑]

常量

(C++17)
nullopt_t 类型的对象
(常量)[编辑]

函数

比较
(C++17)(C++17)(C++17)(C++17)(C++17)(C++17)(C++20)
比较 optional 对象
(函数模板)[编辑]
特化的算法
特化 std::swap 算法
(函数模板)[编辑]
创建一个 optional 对象
(函数模板)[编辑]

[编辑]概要

#include <compare>   namespace std {// 类模板 optionaltemplate<class T>class optional;   template<class T>constexprboolranges::enable_view<optional<T>>=true;template<class T>constexprauto format_kind<optional<T>>= range_format::disabled;   template<class T> concept /*is-derived-from-optional*/= requires(const T& t){// 仅用于阐述[]<class U>(const optional<U>&){}(t);};   // 无值状态指示器struct nullopt_t{/* 见描述 */};inlineconstexpr nullopt_t nullopt(/* 未指明 */);   // 类 bad_optional_accessclass bad_optional_access;   // 关系运算符template<class T, class U>constexprbool operator==(const optional<T>&, const optional<U>&);template<class T, class U>constexprbool operator!=(const optional<T>&, const optional<U>&);template<class T, class U>constexprbool operator<(const optional<T>&, const optional<U>&);template<class T, class U>constexprbool operator>(const optional<T>&, const optional<U>&);template<class T, class U>constexprbool operator<=(const optional<T>&, const optional<U>&);template<class T, class U>constexprbool operator>=(const optional<T>&, const optional<U>&);template<class T, three_way_comparable_with<T> U>constexpr compare_three_way_result_t<T,U> operator<=>(const optional<T>&, const optional<U>&);   // 与 nullopt 比较template<class T>constexprbool operator==(const optional<T>&, nullopt_t)noexcept;template<class T>constexpr strong_ordering operator<=>(const optional<T>&, nullopt_t)noexcept;   // 与 T 比较template<class T, class U>constexprbool operator==(const optional<T>&, const U&);template<class T, class U>constexprbool operator==(const T&, const optional<U>&);template<class T, class U>constexprbool operator!=(const optional<T>&, const U&);template<class T, class U>constexprbool operator!=(const T&, const optional<U>&);template<class T, class U>constexprbool operator<(const optional<T>&, const U&);template<class T, class U>constexprbool operator<(const T&, const optional<U>&);template<class T, class U>constexprbool operator>(const optional<T>&, const U&);template<class T, class U>constexprbool operator>(const T&, const optional<U>&);template<class T, class U>constexprbool operator<=(const optional<T>&, const U&);template<class T, class U>constexprbool operator<=(const T&, const optional<U>&);template<class T, class U>constexprbool operator>=(const optional<T>&, const U&);template<class T, class U>constexprbool operator>=(const T&, const optional<U>&);template<class T, class U> requires (!/*is-derived-from-optional*/<U>)&& three_way_comparable_with<T, U>constexpr compare_three_way_result_t<T, U> operator<=>(const optional<T>&, const U&);   // 特化的算法template<class T>constexprvoid swap(optional<T>&, optional<T>&)noexcept(/* 见描述 */);   template<class T>constexpr optional<decay_t<T>> make_optional(T&&);template<class T, class... Args>constexpr optional<T> make_optional(Args&&... args);template<class T, class U, class... Args>constexpr optional<T> make_optional(initializer_list<U> il, Args&&... args);   // 散列支持template<class T>struct hash;template<class T>struct hash<optional<T>>;}

[编辑]类模板 std::optional

namespace std {template<class T>class optional {public:using value_type = T;using iterator =/* 由实现定义 */;using const_iterator =/* 由实现定义 */;   // 构造函数constexpr optional()noexcept;constexpr optional(nullopt_t)noexcept;constexpr optional(const optional&);constexpr optional(optional&&)noexcept(/* 见描述 */);template<class... Args>constexprexplicit optional(in_place_t, Args&&...);template<class U, class... Args>constexprexplicit optional(in_place_t, initializer_list<U>, Args&&...);template<class U = remove_cv_t<T>>constexprexplicit(/* 见描述 */) optional(U&&);template<class U>constexprexplicit(/* 见描述 */) optional(const optional<U>&);template<class U>constexprexplicit(/* 见描述 */) optional(optional<U>&&);   // 析构函数constexpr ~optional();   // 赋值constexpr optional& operator=(nullopt_t)noexcept;constexpr optional& operator=(const optional&);constexpr optional& operator=(optional&&)noexcept(/* 见描述 */);template<class U = remove_cv_t<T>>constexpr optional& operator=(U&&);template<class U>constexpr optional& operator=(const optional<U>&);template<class U>constexpr optional& operator=(optional<U>&&);template<class... Args>constexpr T& emplace(Args&&...);template<class U, class... Args>constexpr T& emplace(initializer_list<U>, Args&&...);   // 交换constexprvoid swap(optional&)noexcept(/* 见描述 */);   // 迭代器支持constexpr iterator begin()noexcept;constexpr const_iterator begin()constnoexcept;constexpr iterator end()noexcept;constexpr const_iterator end()constnoexcept;   // 观察器constexprconst T* operator->()constnoexcept;constexpr T* operator->()noexcept;constexprconst T& operator*()const&noexcept;constexpr T& operator*()&noexcept;constexpr T&& operator*()&&noexcept;constexprconst T&& operator*()const&&noexcept;constexprexplicit operator bool()constnoexcept;constexprbool has_value()constnoexcept;constexprconst T& value()const&;constexpr T& value()&;constexpr T&& value()&&;constexprconst T&& value()const&&;template<class U = remove_cv_t<T>>constexpr T value_or(U&&)const&;template<class U = remove_cv_t<T>>constexpr T value_or(U&&)&&;   // 单子操作template<class F>constexprauto and_then(F&& f)&;template<class F>constexprauto and_then(F&& f)&&;template<class F>constexprauto and_then(F&& f)const&;template<class F>constexprauto and_then(F&& f)const&&;template<class F>constexprauto transform(F&& f)&;template<class F>constexprauto transform(F&& f)&&;template<class F>constexprauto transform(F&& f)const&;template<class F>constexprauto transform(F&& f)const&&;template<class F>constexpr optional or_else(F&& f)&&;template<class F>constexpr optional or_else(F&& f)const&;   // 修改器constexprvoid reset()noexcept;   private: T *val;// 仅用于阐述};   template<class T> optional(T)-> optional<T>;}
close