繁体   English   中英

__is_trivially_copyable 如何在 g++ stl 中实现?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM