以下代码:
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是未定义行为,不管是什么类型T中std::optional<T>。
根据 cppreference 上的std::optional<T>::operator->:
如果
*this不包含值,则行为未定义。