jot*_*tik 6 c++ language-lawyer c++11 c++14 c++17
除了std::is_trivial和之外std::is_trivially_copyable,C++ 11提供了许多类型特征,用于检查类型是否具有简单的构造函数,析构函数和复制/移动赋值运算符,即:
std::is_trivially_constructiblestd::is_trivially_default_constructiblestd::is_trivially_copy_constructiblestd::is_trivially_move_constructiblestd::is_trivially_assignablestd::is_trivially_copy_assignablestd::is_trivially_move_assignablestd::is_trivially_destructible他们最初的预期目的是什么?当然,一些C++委员会文件必须解释它们包含在C++标准库中的基本原理.
为什么它们在标准库中?因为它们很有用,但无法用语言实现。
两个有用的具体例子。
std::is_trivially_copy_constructible- 如果我有一个vector可以简单复制构造的类型,则在重新分配时不需要单独复制每个元素。我可以memcpy()一口气走完整个街区。我们需要这种类型特征来检查这种优化何时是安全的。  std::is_trivially_destructible-琐碎的破坏是一个类型的重要品质。这是它成为文字类型并因此可在常量表达式中使用的标准之一。在某些情况下,我可能希望我的类型可用作文字类型,这种情况有可能发生(例如std::optional)。我们需要这种类型特征才能optional<T>有条件地轻松破坏。| 归档时间: | 
 | 
| 查看次数: | 167 次 | 
| 最近记录: |