Концепции C++: TriviallyCopyable
Материал из cppreference.com
Тривиально-копируемый тип — это тип данных, который копируется простым копированием области памяти без разбора, что внутри.
В C++03 было понятие «простые тупые данные», в C++11 эту концепцию разделили на несколько, одна из который — тривиально-копируемый тип.
[править] Требования
- Конструктор копирования
T(const T&)
тривиальный (неявно или черезdefault
) или удалён. - Конструктор перемещения
T(T&&)
тривиальный или удалён. - Операция «присвоить»
T& operator = (const T&)
тривиальная или удалена. - Операция «присвоить с перемещением»
T& operator = (T&&)
тривиальная или удалена. - При этом хоть одно из этих четырёх должно существовать.
- Тривиальный деструктор.
Отсюда следует, что нет виртуальных функций, виртуального наследования.
Скалярные типы, массивы из TriviallyCopyable и const-версии этих типов (но не volatile!) также TriviallyCopyable.
[править] Сообщения о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
CWG 1734 | C++11 | POD’ы C++03 с убранной операцией присваивания были не тривиальными | Разрешены удалённые конструкторы/операции |
[править] См. также
(C++11) |
проверяет, можно ли тривиально скопировать тип (шаблон класса) |