![](/img/trans.png)
[英]is_trivially_copyable behaves differently between the constructor I implemented and the default
[英]how __is_trivially_copyable is implemented inside g++ stl?
在 stl 算法中,当值类型是 triviall copyable 时,复制算法会使用 memmove 来加速这个操作。 我发现在文件“type_trait”中,它使用以下代码来检查 object 是否可以轻松复制:
template<typename _Tp>
struct is_trivially_copyable
: public integral_constant<bool, __is_trivially_copyable(_Tp)>
{ };
问题一:__is_trivially_copyable 是在哪里实现的? 我使用 grep 搜索整个“包含”目录,找不到 __is_trivially_copyable 的定义。
问题2:stl如何检查开始迭代器和结束迭代器之间的memory分配是否连续? 例如,如果迭代器属于出队,那么我们必须为每个元素调用移动操作,而不是像向量或数组中的一个 memmove。
A1:@HolyBlackCat 是正确的; __is_trivially_copyable
是编译器内在的。 没有真正的方法可以告诉(在语言中)任意类型是否可以轻松复制。
A2:标准库查看迭代器是否是原始指针(与某些类相反)。 如果迭代器是指针,则 memory 是连续的。 (其他迭代器类型可能支持连续的 memory,但一般无法检测到)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.