std::optional 的未定义行为
根据 C++ 参考文档,我整理了关于 std::optional::operator* 的格式说明:
std::optional::operator*
功能
通过指针方式访问所包含的值。
原型
constexpr T& operator*() &;
constexpr const T& operator*() const&;
constexpr T&& operator*() &&;
constexpr const T&& operator*() const&&;
返回值
- 返回指向所包含值的指针
- 返回对所包含值的引用
重要警告:如果 *this 不包含值,则行为未定义
示例代码
std::optional<bool> anOptional;
std::cout << *anOptional << std::endl; // 输出 0,但实际上 anOptional 中并未包含值
// 这是未定义行为!
安全使用建议
当不确定 optional 是否含有值时,请使用 std::optional<T>::value_or:
std::optional<bool> anOptional;
std::cout << anOptional.value_or(true) << std::endl; // 安全:输出 1(默认值)
注意事项
- 使用
operator*前必须确保optional包含值 - 可通过
has_value()或直接布尔转换检查是否包含值 - 推荐使用
value()成员函数(会在空值时抛出异常)或value_or()来安全访问

浙公网安备 33010602011771号