Пространства имён
Варианты
Действия

cpp/concept/TriviallyCopyable: различия между версиями

Материал из cppreference.com
Нет описания правки
Нет описания правки
Строка 7: Строка 7:


===Требования===
===Требования===
* Тривиальный конструктор копирования <code>T(const T&)</code>
* копирования <code>T(const T&)</code>
* Тривиальный конструктор перемещения <code>T(T&&)</code>
* перемещения <code>T(T&&)</code>
* Тривиальная операция «присвоить» <code>T& operator = (const T&)</code>
* «присвоить» <code>T& operator = (const T&)</code>
* Тривиальная операция «присвоить с перемещением» <code>T& operator = (T&&)</code>
* «присвоить с перемещением» <code>T& operator = (T&&)</code>
* Тривиальный деструктор
* Без виртуальных функций, виртуального наследования
* Тривиальный деструктор
* Все нестатические поля и базовые классы тоже TriviallyCopyable
 
===Заметки===
виртуальных функций, виртуального наследования
# При этом ''тривиальные'' конструкторы, присваивание и деструктор должны быть определены неявно (не заданы пользователем).
 
# Простейшие типы и массивы из объектов TriviallyCopiable также TriviallyCopiable.
=== ===
конструкторы
 
===См. также===
===См. также===
{{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 без операции присваивания были не тривиальными Разрешены удалённые конструкторы/операции

См. также

проверяет, можно ли тривиально скопировать тип
(шаблон класса) [править]