除了std::is_trivial
和std::is_trivially_copyable
之外,C ++ 11还提供了许多类型特征,用于检查类型是否具有琐碎的构造函数,析构函数和复制/移动赋值运算符,即:
std::is_trivially_constructible
std::is_trivially_default_constructible
std::is_trivially_copy_constructible
std::is_trivially_move_constructible
std::is_trivially_assignable
std::is_trivially_copy_assignable
std::is_trivially_move_assignable
std::is_trivially_destructible
他们最初的目的是什么?当然,一些C ++委员会文件必须解释将它们包含在C ++标准库中的基本原理。
答案 0 :(得分:2)
为什么他们在标准库中?因为它们很有用但不可能用语言实现。
两个有用的具体例子。
std::is_trivially_copy_constructible
- 如果我有一个vector
类型可以轻易复制,我在重新分配时不需要单独复制每个元素。我可以一次memcpy()
整个街区。我们需要这种类型的特性来检查这种优化何时是安全的。 std::is_trivially_destructible
- Trivial destruction是一种重要的品质。它是文字类型的标准之一,因此可用于常量表达式。在某些情况下,我可能希望我的类型可以作为文字类型使用(例如std::optional
)。我们需要这种类型的特征,以使optional<T>
有条件地可以轻易地破坏。