我查看了 GCC STL (4.6.1) 并看到它std::copy()
使用优化版本,以防内置函数__is_trivial()
评估为true
.
由于std::copy()
和std::reverse_copy()
模板对于复制数组中的元素非常有用,我想使用它们。但是,我有一些类型(它们是模板实例化的结果),它们是包含一些琐碎值、没有指针并且没有复制构造函数或赋值运算符的结构。
G++ 是否足够聪明,可以发现我的类型实际上是微不足道的?C++98 中是否有任何方法可以确保 STL 实现知道我的类型是微不足道的?
is_trivial<>
我猜想在 C++11 中,使用类型特征会变得很方便。这是正确的吗?
谢谢!
编辑:很抱歉这么晚了,但这里有一个非常简单的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;
}