Man*_*uel 7 c++ stl c++11 c++98
我查看了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;
}
Run Code Online (Sandbox Code Playgroud)
对于什么trivial意味着一直存在争议.
例如,就我所知,你的例子并非简单可构建(std::is_trivially_default_constructible我认为会返回false).
在你的情况下,我认为你需要新的特性std::is_trivially_copyable,这是更细粒度的.那么...升级你的编译器?