类型特征的基本原理检查类特殊函数的无关紧要

时间:2017-02-20 20:29:03

标签: c++ c++11 c++14 language-lawyer c++17

除了std::is_trivialstd::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 ++标准库中的基本原理。

1 个答案:

答案 0 :(得分:2)

为什么他们在标准库中?因为它们很有用但不可能用语言实现。

两个有用的具体例子。

  • std::is_trivially_copy_constructible - 如果我有一个vector类型可以轻易复制,我在重新分配时不需要单独复制每个元素。我可以一次memcpy()整个街区。我们需要这种类型的特性来检查这种优化何时是安全的。
  • std::is_trivially_destructible - Trivial destruction是一种重要的品质。它是文字类型的标准之一,因此可用于常量表达式。在某些情况下,我可能希望我的类型可以作为文字类型使用(例如std::optional)。我们需要这种类型的特征,以使optional<T>有条件地可以轻易地破坏。