C++/STL/optional
< C++
<optional>是C++17引入的头文件。主要定义了std::optional类模板。
std::optional
编辑std::optional类模板用于管理一个可能包含的值,即一个值可能存在也可能不存在。 常见用例是可能失败的函数的返回值。
任何optional<T>实例或者包含值或者不包含值。如果包含值,则该值保证在optional对象所占据的内存中分配,不会发生动态内存分配。因此,optional对象模拟了一个对象,而不是模拟了指针,即使它定义了operator*()和operator->() 。
optional不支持引用。
- 成员类型
- value_type T
- 成员函数
- 构造函数
- 析构函数:也会析构可能包含的值
- operator=
- operator-> 访问包含的值
- operator* 访问包含的值
- operator bool 检查是否包含值
- has_value 检查是否包含值
- value
- value_or 返回包含的值,否则返回其他值。
- 单目运算(C++23)
- and_then
- transform
- or_else
- 修改器
- swap
- reset 析构所包含的对象
- emplace
- 非成员函数
- operator==
- operator!=
- operator<
- operator<=
- operator>
- operator>=
- operator<=>
- make_optional 创建一个对象
- std::swap(std::optional)
- 帮助器类
- std::hash<std::optional>
- nullopt_t optional类型的未初始化状态的指示器
- bad_optional_access 指示不含值的异常
#include <optional>
#include <string>
// optional can be used as the return type of a factory that may fail
std::optional<std::string> create(bool b)
{
if (b)
return "Godzilla";
return {};
}
// std::nullopt can be used to create any (empty) std::optional
auto create2(bool b)
{
return b ? std::optional<std::string>{"Godzilla"} : std::nullopt;
}
int main()
{
std::cout << "create(false) returned "
<< create(false).value_or("empty") << '\n';
// optional-returning factory functions are usable as conditions of while and if
if (auto str = create2(true))
std::cout << "create2(true) returned " << *str << '\n';
}