Концепции 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) |
проверяет, можно ли тривиально скопировать тип (шаблон класса) |