c++ - 如何在 C++ 中使用 std::optional

标签 c++ functional-programming monads c++17

在 C++17 中引入了 std::optional,我很高兴这个决定,直到我看到 ref .我从 Scala、Haskell 和 Java 8 知道 Optional/Maybe,其中 optional 是一个 monad 并遵循 monadic 法则。 C++17 实现中不是这种情况。我应该如何使用 std::optional,没有像 mapflatMap/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/

相关文章:

c++ - 使内存可读、可写和可执行是否会受到任何性能影响?

types - 在插件架构中扩展类型

clojure - 我如何从clojure中给定的两个值一个一个地调用一个函数

javascript - 可绑定(bind)和可调用模式的用途是什么?

haskell - 如何即时使用 IO monad 输出

c++内联函数在GCC内联汇编中包装单个vmovups

c++ - 有没有办法使用独立的 `std::begin` 和 const_iterator?

c++ - 在下面的程序中,如何在 findLowest 函数中显示事故次数最少的地区的名称?

scala - Monad for-comprehensions with implicit Monad 失败,使用继承?

haskell - 免费的单子(monad)也适用吗?