为什么std :: function本身是一个可复制构造的类型?

时间:2017-05-08 16:10:01

标签: c++ c++11

我发现规范的tr.func.require部分要求{C} 11中的std::function可以复制构造,我已经看到了很多解释为什么这意味着函子用于构造std::function必须是可复制的,但为什么C ++ 11标准首先使std::function可复制,而不是使其成为仅移动类型?

1 个答案:

答案 0 :(得分:2)

std::function在C ++ 11之前实现,当时move-semantics尚未可用(它来自boost::function并且是TR1的一部分)。

我的猜测是在移动语义之前指定了std::function(并且可能被投入标准)。鉴于此,没有时间审查标准的其余部分。另请参阅this answer关于why shared_ptr deleters have to be CopyConstructible

另外,出于兼容性原因,突然发生make std::function移动构造并删除其复制构造函数听起来不合理。

相关问题