std :: copy/memcpy/memmove优化

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)

Mat*_* M. 5

对于什么trivial意味着一直存在争议.

例如,就我所知,你的例子并非简单可构建(std::is_trivially_default_constructible我认为会返回false).

在你的情况下,我认为你需要新的特性std::is_trivially_copyable,这是更细粒度的.那么...升级你的编译器?