C++标准库中有无现成的option实现

avatar
作者
筋斗云
阅读量:0

C++ 标准库没有直接提供类似于 Python 中 Option 或 Rust 中 Option 的实现

  1. 使用智能指针:可以使用 C++ 标准库中的智能指针,如 std::unique_ptrstd::shared_ptr。当指针为空时,可以将其视为 “None”,而非空时则表示存在一个值。
#include<iostream> #include<memory>  int main() {     std::unique_ptr<int> optionalInt;      if (optionalInt) {         std::cout << "Value: " << *optionalInt<< std::endl;     } else {         std::cout << "No value"<< std::endl;     }      return 0; } 
  1. 使用 std::optional(C++17 引入):std::optional 是一个可以包含值也可以不包含值的模板类。它可以用来表示一个值可能存在,也可能不存在的情况。
#include<iostream> #include<optional>  int main() {     std::optional<int> optionalInt;      if (optionalInt.has_value()) {         std::cout << "Value: "<< optionalInt.value()<< std::endl;     } else {         std::cout << "No value"<< std::endl;     }      return 0; } 
  1. 使用 std::variant(C++17 引入):std::variant 是一个联合类型,可以存储其定义的类型集合中的一个类型的值。可以用它来表示一个值可能是多种类型之一,包括 “无值”(例如 std::monostate)。
#include<iostream> #include<variant>  int main() {     std::variant<std::monostate, int> optionalInt;      if (std::holds_alternative<int>(optionalInt)) {         std::cout << "Value: "<< std::get<int>(optionalInt)<< std::endl;     } else {         std::cout << "No value"<< std::endl;     }      return 0; } 

这些方法都可以用来表示一个值可能存在,也可能不存在的情况,从而类似于其他语言中的 Option 类型。选择哪种方法取决于你的具体需求和偏好。在 C++17 及更高版本中,std::optional 通常是最简单且最直接的选择。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!