MST

星途 面试题库

面试题:C++ 中 std::optional 的应用场景

请阐述在 C++ 中 std::optional 的主要应用场景,并给出一个简单的代码示例展示其用法。
22.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

主要应用场景

  1. 函数可能返回无效值的情况:当一个函数并非总是能够返回有效的结果时,使用 std::optional 可以清晰地表明这一点,而不是通过返回特殊值(如 -1 表示错误等)来暗示无效。
  2. 避免空指针异常:在处理可能为空的对象指针时,std::optional 提供了一种更安全的替代方案,避免了在解引用指针时可能出现的空指针异常。
  3. 优化内存使用:对于一些可能不经常使用的对象,std::optional 可以延迟对象的创建,只有在真正需要时才分配内存。

代码示例

#include <iostream>
#include <optional>

// 函数可能返回有效的整数,也可能返回无效值
std::optional<int> divide(int a, int b) {
    if (b == 0) {
        return std::nullopt; // 返回无效值
    }
    return a / b;
}

int main() {
    auto result1 = divide(10, 2);
    if (result1.has_value()) {
        std::cout << "10 / 2 = " << result1.value() << std::endl;
    } else {
        std::cout << "Division by zero." << std::endl;
    }

    auto result2 = divide(5, 0);
    if (result2.has_value()) {
        std::cout << "5 / 0 = " << result2.value() << std::endl;
    } else {
        std::cout << "Division by zero." << std::endl;
    }

    return 0;
}