我的理解是std::copy
一次复制一个元素。为了触发每个元素的构造函数,这似乎是必要的。但是当不存在这样的构造函数时(例如 POD),我认为 amemcpy
会更有效率。
那么,STL 是否需要/允许专门化,例如,vector<int>
复制只会做一个memcpy
?
我希望为 GCC / MSVC 回答以下问题,因为这些是我使用的编译器。
- 如果允许但不需要,上面的编译器是否真的做到了?
- 如果他们这样做,这会触发哪些容器?显然它没有意义
list
,但是string
ordeque
呢? - 同样,如果他们这样做,哪些包含的类型会触发这个?只有内置类型,还是我自己的 POD 类型(例如
struct Point {int x, y;}
)? - 如果他们不这样做,使用我自己的包装器是否会更快
new
//delete
指针memcpy
用于整数/字符/我自己的结构数组之类的东西?