实验性库头文件 <experimental/optional>

来自cppreference.com
< cpp‎ | header‎ | experimental
 
 
 
实验性库头文件
文件系统 TS
<experimental/filesystem>
并行 TS (v1, v2)
库基础 TS (v1, v2, v3)
并发 TS
范围 TS
协程 TS
<experimental/coroutine>
网络 TS
反射 TS
<experimental/reflect>
 

此头文件是库基础 TS (v1, v2) 的一部分。

名字 说明
(库基础 TS)
可能或可能不保有一个对象的包装器
(类模板)
(库基础 TS)
指示进行了到不含值的 optional 的有检查访问的异常
(类)
(库基础 TS)
用于 optional 类型的就地构造的消歧义标签类型
(类)
特化 std::hash 算法
(类模板特化)
(库基础 TS)
带未初始化状态的 optional 类型的指示器
(类)

函数

比较
比较 optional 对象
(函数模板)
特化的算法
特化 std::swap 算法
(函数)
创建一个 optional 对象
(函数模板)
散列支持

概要

namespace std {
  namespace experimental {
  inline namespace fundamentals_v1 {
 
    // 5.4,用于对象类型的 optional
    template <class T> class optional;
 
    // 5.5,就地构造
    struct in_place_t{};
    constexpr in_place_t in_place{};
 
    // 5.6,无值状态指示器
    struct nullopt_t{see below};
    constexpr nullopt_t nullopt(unspecified);
 
    // 5.7,类 bad_optional_access
    class bad_optional_access;
 
    // 5.8,关系运算符
    template <class T>
      constexpr bool operator==(const optional<T>&, const optional<T>&);
    template <class T>
      constexpr bool operator!=(const optional<T>&, const optional<T>&);
    template <class T>
      constexpr bool operator<(const optional<T>&, const optional<T>&);
    template <class T>
      constexpr bool operator>(const optional<T>&, const optional<T>&);
    template <class T>
      constexpr bool operator<=(const optional<T>&, const optional<T>&);
    template <class T>
      constexpr bool operator>=(const optional<T>&, const optional<T>&);
 
    // 5.9,与 nullopt 比较
    template <class T> constexpr bool operator==(const optional<T>&, nullopt_t) noexcept;
    template <class T> constexpr bool operator==(nullopt_t, const optional<T>&) noexcept;
    template <class T> constexpr bool operator!=(const optional<T>&, nullopt_t) noexcept;
    template <class T> constexpr bool operator!=(nullopt_t, const optional<T>&) noexcept;
    template <class T> constexpr bool operator<(const optional<T>&, nullopt_t) noexcept;
    template <class T> constexpr bool operator<(nullopt_t, const optional<T>&) noexcept;
    template <class T> constexpr bool operator<=(const optional<T>&, nullopt_t) noexcept;
    template <class T> constexpr bool operator<=(nullopt_t, const optional<T>&) noexcept;
    template <class T> constexpr bool operator>(const optional<T>&, nullopt_t) noexcept;
    template <class T> constexpr bool operator>(nullopt_t, const optional<T>&) noexcept;
    template <class T> constexpr bool operator>=(const optional<T>&, nullopt_t) noexcept;
    template <class T> constexpr bool operator>=(nullopt_t, const optional<T>&) noexcept;
 
    // 5.10,与 T 比较
    template <class T> constexpr bool operator==(const optional<T>&, const T&);
    template <class T> constexpr bool operator==(const T&, const optional<T>&);
    template <class T> constexpr bool operator!=(const optional<T>&, const T&);
    template <class T> constexpr bool operator!=(const T&, const optional<T>&);
    template <class T> constexpr bool operator<(const optional<T>&, const T&);
    template <class T> constexpr bool operator<(const T&, const optional<T>&);
    template <class T> constexpr bool operator<=(const optional<T>&, const T&);
    template <class T> constexpr bool operator<=(const T&, const optional<T>&);
    template <class T> constexpr bool operator>(const optional<T>&, const T&);
    template <class T> constexpr bool operator>(const T&, const optional<T>&);
    template <class T> constexpr bool operator>=(const optional<T>&, const T&);
    template <class T> constexpr bool operator>=(const T&, const optional<T>&);
 
    // 5.11,特化的算法
    template <class T> void swap(optional<T>&, optional<T>&) noexcept(see below);
    template <class T> constexpr optional<see below> make_optional(T&&);
 
  } // namespace fundamentals_v1
  } // namespace experimental
 
  // 5.12,散列支持
  template <class T> struct hash;
  template <class T> struct hash<experimental::optional<T>>;
 
} // namespace std