在 C++17 中引入了 std::optional
,我很高兴这个决定,直到我看到 ref .我从 Scala、Haskell 和 Java 8 知道 Optional
/Maybe
,其中 optional 是一个 monad 并遵循 monadic 法则。 C++17 实现中不是这种情况。我应该如何使用 std::optional
,没有像 map
和 flatMap
/bind
这样的函数,那是什么使用 std::optional
与例如返回 -1
或函数计算结果失败时的 nullptr
相比有优势吗?
对我来说更重要的是,为什么 std::optional
没有设计成 monad,有什么原因吗?
最佳答案
有P0798r0正是这个提议,以及相关的实现here on Github .该提案还引用了通用的 monadic 接口(interface)提案,以及类似的可用 std::expected。这些的实现也可用。
关于c++ - 如何在 C++ 中使用 std::optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40003214/