【发布时间】:2017-02-21 12:39:59
【问题描述】:
在 C++17 中引入了std::optional,我对这个决定感到高兴,直到我查看了ref。我知道 Optional/Maybe 来自 Scala、Haskell 和 Java 8,其中 optional 是一个单子并遵循单子定律。在 C++17 实现中情况并非如此。我应该如何使用std::optional,没有像map和flatMap/bind这样的函数,使用std::optional与例如从函数返回-1或nullptr有什么优势?它无法计算结果?
对我来说更重要的是,为什么 std::optional 不被设计成一个单子,有什么原因吗?
【问题讨论】:
-
C++ 不是 Haskell。
-
如果 -1 已经是一个有效的返回值怎么办?
-
如果您返回
int并返回-1作为失败,这意味着-1冷永远不会是输入的有效输出。大多数时候你不能这样做。至于使用情况,你应该咨询reference -
你不能从返回类型为
int的函数返回nullptr。 -
"但可选类型显然来自函数式编程" 这可能是你困惑的根源。
标签: c++ functional-programming monads c++17