cpp/concept/TriviallyCopyable: различия между версиями
Материал из cppreference.com
Нет описания правки |
Нет описания правки |
||
| Строка 7: | Строка 7: | ||
===Требования=== | ===Требования=== | ||
* | * копирования <code>T(const T&)</code> | ||
* | * перемещения <code>T(T&&)</code> | ||
* | * «присвоить» <code>T& operator = (const T&)</code> | ||
* | * «присвоить с перемещением» <code>T& operator = (T&&)</code> | ||
* Тривиальный деструктор | |||
* Тривиальный деструктор | |||
=== | виртуальных функций, виртуального наследования | ||
=== === | |||
конструкторы | |||
===См. также=== | ===См. также=== | ||
{{dsc begin}} | {{dsc begin}} | ||
Версия от 11:39, 31 мая 2017
Тривиально-копируемый тип — это тип данных, который копируется простым копированием области памяти без разбора, что внутри.
В C++03 было понятие «простые тупые данные», в C++11 эту концепцию разделили на несколько, одна из который — тривиально-копируемый тип.
Требования
- Конструктор копирования
T(const T&)удалён или тривиальный (неявно или черезdefault). - Конструктор перемещения
T(T&&)удалён или тривиальный. - Операция «присвоить»
T& operator = (const T&)удалена или тривиальная. - Операция «присвоить с перемещением»
T& operator = (T&&)удалена или тривиальная. - При этом хоть одно из этих четырёх должно существовать.
- Тривиальный деструктор.
Отсюда следует, что нет виртуальных функций, виртуального наследования.
Сообщения о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| CWG 1734 | C++11 | POD’ы C++03 без операции присваивания были не тривиальными | Разрешены удалённые конструкторы/операции |
См. также
(C++11) |
проверяет, можно ли тривиально скопировать тип (шаблон класса) |