首页 > 编程笔记 > C++笔记 阅读:33

C++ std::optional的用法(附带实例)

通义灵码
在传统的 C++ 编程中,我们常常使用指针、特殊返回值或者额外的状态检查来表示某个值的缺失(如使用 NULL 或 -1)。然而,这些方法要么不安全(如裸指针),要么不直观(如特殊值),也不具有类型安全性。

std::optional 通过封装一个可选的值和一个布尔类型的状态标志来解决这一问题,使得代码更加清晰且易于维护。

C++ optional的基础用法

std::optional<T> 是一个模板类型,内部存储一个类型为 T 的值,这个类型提供了丰富的接口。
此外,std::optional 还支持 operator*operator-> ,用于直接访问存储的值(前提是存在这个值),这使得它的使用更加直观和方便。
  1. #include <optional>
  2. #include <iostream>
  3. std::optional<int> get_even_number(int num) {
  4. if (num % 2 == 0) return num;
  5. return std::nullopt; // 返回一个空的 std::optional 对象
  6. }
  7. int main() {
  8. auto result = get_even_number(3);
  9. if (result.has_value()) {
  10. std::cout << "Even number: " << result.value() << '\n';
  11. } else {
  12. std::cout << "No even number provided.\n";
  13. }
  14. }
在这个示例中,get_even_number() 函数尝试返回一个偶数。如果输入的数是偶数,它就返回该数并封装在 std::optional 中;如果不是,就返回 std::nullopt,表示没有值。这使得函数的调用者可以明确知道何时没有有效的返回值,避免使用魔术数字或裸指针的风险。

相关文章