我是一名C++程序员,最近尝试学习std::future和std::promise。当我随机搜索关于future/promise的一些信息时,我发现JavaScript中有关于future/promise的讨论,并且JavaScript中的promise具有then函数。在C++中,即使std::future现在没有then函数,但是一些提案已经提到了它。因此,有两个问题: std::future在C++中是否对应于JavaScript中的promise? 如果问题1是真的,为什么他们混淆了future和promise?
是的。 std::future<T> 表示一个将来会持有类型 T 的结果的 future 对象。即该对象在未来某个时间点将会持有一个 T。而 std::promise<T> 是一个承诺在未来某个时间点提供一个类型为 T 的对象。 哪种语言的命名更为正确存在争议。
动态类型语言有时会将在静态类型语言中分离的概念结合起来。JavaScript Promise 基本上是 C++ Promise 和 Future 的组合体。在 JavaScript 中,resolve 和 reject 函数大致对应于 C++ 中的 Promise 一侧,而 then 函数大致对应于 C++ 中的 Future 一侧。此外,在 JavaScript 中,then 也可以组合 Promises。你可能认为这是第三个特点,但在实践中,没有组合,Futures 实际上并不是非常有用。