boost 库,似乎是即将到来的 C++0x 标准,定义了各种类型特征模板,以区分具有普通构造函数、复制构造函数、赋值或析构函数的对象与没有的对象。它最重要的用途之一是优化某些类型的算法,例如通过使用 memcpy。
但是,我不明白所有各种 has_trivial_X 模板之间真正的实际区别。C++ 标准仅定义了与我们相关的两大类类型:POD 和非 POD。如果类型具有定义的构造函数、复制构造函数、赋值运算符或析构函数,则该类型是非 POD。换句话说,任何不是内置类型或内置类型的 C-struct 的东西都不是 POD。
那么区分 has_trivial_assign 和 has_trivial_constructor 的意义何在?如果一个对象具有非平凡的赋值运算符或非平凡的构造函数,则它不是 POD。那么在什么情况下知道一个对象有一个平凡的赋值运算符,但一个非平凡的构造函数是有用的呢?
换句话说,为什么不定义一个单一的类型特征模板,is_pod<T>
然后用它来完成呢?