В алгоритме stl, когда тип значения является тривиальным копируемым, алгоритм копирования будет использовать memmove для ускорения этой операции. Я обнаружил, что в файле «type_trait» он использует следующий код для проверки возможности простого копирования объекта:
template<typename _Tp>
struct is_trivially_copyable
: public integral_constant<bool, __is_trivially_copyable(_Tp)>
{ };
Вопрос 1: где реализован __is_trivially_copyable? Я использую grep для поиска по всему каталогу «include» и не могу найти определение __is_trivially_copyable.
Вопрос 2: как stl проверить непрерывность распределения памяти между начальным итератором и конечным итератором? например, если итератор принадлежит к dequeue, то мы должны вызывать операцию перемещения для каждого элемента, а не только для одного memmove, как в векторе или массиве.