Namespaces
Variants

C++ named requirements: TriviallyCopyable (since C++11)

From cppreference.net
C++ named requirements

Примечание: стандарт не определяет именованное требование с таким названием. Это категория типов, определяемая ядром языка. Она включена сюда как именованное требование только для обеспечения единообразия.

Содержание

Требования

Следующие типы в совокупности называются тривиально копируемыми типами :

Примечания

В общем случае, для любого тривиально копируемого типа T и объекта obj1 типа T , базовые байты obj1 могут быть скопированы в массив char , или unsigned char , или std::byte (начиная с C++17) или в obj2 , отдельный объект типа T . Ни obj1 , ни obj2 не могут быть потенциально перекрывающимися подобъектами.

Если базовые байты obj1 копируются в такой массив, а затем полученное содержимое копируется обратно в obj1 , obj1 сохранит свое исходное значение. Если базовые байты obj1 копируются в obj2 , obj2 будет содержать значение obj1 .

Базовые байты могут быть скопированы с помощью std::memcpy или std::memmove , при условии что не производится доступ к активным volatile-объектам.

Отчёты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
CWG 1734 C++11 C++03 POD with deleted non-trivial assignment was not trivial deleted ctors/operators allowed
CWG 2094 C++11 Volatile scalar types are not trivially copyable ( CWG 1746 ) made trivially copyable

Смотрите также

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