为什么 std::function 本身是可复制构造的类型?
Why is std::function itself a copy-constructible type?
我发现规范的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
移动可构造并删除其复制构造函数听起来不合理。
相关文章:
- 平凡类型与非平凡类型的复制消除差异
- 简单可复制与可简单复制
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 对于参加可复制和可移动类的访问者来说,应该有多少过载?
- 可变参数宏:无法通过"..."传递非平凡可复制类型的对象
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 为什么 std::atomic<std::string> 会给出微不足道的可复制错误?
- 我可以隐式地创建一个琐碎的可复制类型吗
- 是std::memcpy在不同的可复制类型之间的未定义行为
- 为什么一对常量是微不足道的可复制的,而对不是?
- 防御性地应用 std::move 到平凡可复制的类型是否不可取
- 为什么 std::function 本身是可复制构造的类型?
- 错误:无法通过'...'传递非平凡可复制类型的对象'class boost::filesystem::path'
- 使用临时存储区复制普通的可复制类型:允许吗
- 非平凡可复制类型的值表示
- 类型 traits,用于检查参数包中的所有类型是否都是可复制构造的
- 交换包含非一般可复制类型的“std::aligned_storage”实例-未定义的行为
- 错误:无法通过`..`传递非普通可复制类型的对象
- 无法传递非普通可复制类型“const class mysqlpp::String”的对象
- 将std::memcpy用于非平凡可复制类型的对象