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

Why is std::function itself a copy-constructible type?

本文关键字:类型 可复制 std function 为什么      更新时间:2023-10-16

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

std::function

是在C++11 之前实现的,当时移动语义尚不可用(它源于boost::function,是 TR1 的一部分)。

我的猜测是,std::function在移动语义之前就被指定了(也许投票到标准中)。并且没有时间根据这一点审查所有其他标准。另请参阅此答案,了解为什么shared_ptr删除器必须是 CopyConstructible。

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