是否使用空 std::optional<string> UB?

mik*_*ike 5 c++

以下代码:

    std::optional<std::string> so;
    std::cout << so->size() << std::endl;
    std::cout << so.has_value();
Run Code Online (Sandbox Code Playgroud)

输出:

   0
   0  
Run Code Online (Sandbox Code Playgroud)

我的问题是so->size()在空的可选项上调用 : 是否安全。我使用了 clang 消毒剂,但它没有在上面的代码中报告任何 UB。

Fra*_*eux 12

使用operator->上的空白std::optional是未定义行为,不管是什么类型Tstd::optional<T>

根据 cppreference 上的std::optional<T>::operator->

如果*this不包含值,则行为未定义。