簡體   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