(11)std::optional

std::optional 是 C++17 引入的一个容器类模板,用于表示一个值可能存在,也可能不存在。
它提供了一种类型安全的方式来处理“可空值”(nullable value),避免使用 nullptr、特殊值(如 -1)或 bool、value 的笨拙方式。

std::optional<T> 包装一个类型为 T 的值,它有两种状态:
 - 有值(engaged):包含一个 T 类型的值。
 - 无值(disengaged):不包含任何值,类似于“空”或“未初始化”。
 
优势:类型安全、语义清晰、避免魔术值、异常安全
T 不能是引用类型

std::optional<int&> ref_opt;  //编译错误
// 应使用 std::reference_wrapper
std::optional<std::reference_wrapper<int>> ref_opt; 
性能考虑

std::optional<T> 的大小通常是 sizeof(T) + 1(用于状态标志)。
对于大对象,考虑是否真的需要 optional,或使用指针。
posted @ 2019-06-24 16:04  osbreak  阅读(1240)  评论(0)    收藏  举报