std::optional 的详细程度

fro*_*nca 1 c++ c++17

这是我的代码中的一个示例,使用std::optional

Max = index(summary_max.value(), clusters[summary_max.value()]->Maximum().value());
Run Code Online (Sandbox Code Playgroud)

在这里,summary_max并且Maximum()std::optional。这太冗长了。我只想打字index(summary_max, clusters[summary_max]->Maximum());

为什么不std::optional<T>支持隐式转换为T?是否有任何有效的、不可避免的理由?

dfr*_*fri 5

如果您确定您的可选对象确实有值,您可以使用operator*运算符函数而不是value()成员函数:

Max = index(*summary_max, 
            *(clusters[*summary_max]->Maximum()));
// rant: looks more like C than C++ to me.
Run Code Online (Sandbox Code Playgroud)

但是当您使用存储值summary_max两次时,您可能只想在index(...)调用之前提取 (copy/const ref) 。

const auto& max_index = summary_max.value();
Max = index(max_index, *(clusters[max_index]->Maximum()));
Run Code Online (Sandbox Code Playgroud)