c++ - 类型特征检查类特殊函数的琐碎性的基本原理

标签 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++ 标准库中的基本原理。

最佳答案

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


两个具体的有用示例。

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

关于c++ - 类型特征检查类特殊函数的琐碎性的基本原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353660/

相关文章:

c++ - std::array c++11 初始值设定项语法错误

c++ - gcc6.x 中的 constexpr 优化错误?

c++ - 将 std::unique_ptr<Derived> 转换为 std::unique_ptr<Base>

C++ 程序使用 C 库中的损坏符号导致 undefined symbol

c++ - 初始化 std::map 迭代器类成员

C++ 对象名与类名相同

c++11 - 扩展 std::tuple

c++ - C++ 中的延迟评估包装类?

c++ - 未调用基类构造函数?

c++ - 假设每个静态库都定义了导出的功能 (vc++ 2008),如何将多个静态链接库合并到一个 dll 中?