【发布时间】:2012-01-18 16:32:08
【问题描述】:
我查看了 GCC STL (4.6.1),发现 std::copy() 使用优化版本,以防内置 __is_trivial() 评估为 true。
由于std::copy() 和std::reverse_copy() 模板对于复制数组中的元素非常有用,我想使用它们。但是,我有一些类型(它们是模板实例化的结果),它们是包含一些琐碎值、没有指针并且没有复制构造函数或赋值运算符的结构。
G++ 是否足够聪明,能够发现我的类型实际上是微不足道的? C++98 中是否有任何方法可以确保 STL 实现知道我的类型是微不足道的?
我猜想在 C++11 中,使用 is_trivial<> 类型特征会变得很方便。是这样吗?
谢谢!
编辑:很抱歉这么晚了,但这里有一个非常简单的Type 类的例子,它对 GCC 和 llvm 来说不是微不足道的。有什么想法吗?
#include <iostream>
struct Spec;
template <typename TValue, typename TSpec>
class Type
{
public:
TValue value;
Type() : value(0) {}
};
int main()
{
std::cerr << "__is_trivial(...) == "
<< __is_trivial(Type<char, Spec>) << '\n';
return 0;
}
【问题讨论】:
-
C++03 POD 也禁止默认构造函数,如果我记得的话,这可能是防止它变得微不足道的原因。
-
@MooingDuck:谢谢,我想这就是解释。连同马修的回答,这回答了我的问题。