【发布时间】:2017-10-06 17:41:18
【问题描述】:
我发现规范的 tr.func.require 部分要求 std::function 在 C++11 中是可复制构造的,并且我已经看到很多解释为什么这意味着函子曾经构造 std::function 必须是可复制的,但是为什么 C++11 标准首先使 std::function 可复制,而不是使其成为仅移动类型?
【问题讨论】:
-
可能是因为标准定义的很多(可能是全部,不记得了)算法允许复制传递给它们的函子。
-
std::function 应该像 C 函数指针一样可用,否则它将毫无用处。这意味着不受限制的哄骗。如果我想在两个不同的位置存储一个函数的副本,我将如何使用仅移动函数来做到这一点?
-
NathanOliver,这个要求在任何地方都有明确说明吗?抽查,除了(到目前为止)在 C++17 中引入的 for_each 的并行版本之外,我在大多数算法中都没有发现任何此类要求。
-
我们需要
std::unique_function