C++ named requirements: TriviallyCopyable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Примечание: стандарт не определяет именованное требование с таким названием. Это категория типов, определяемая ядром языка. Она включена сюда как именованное требование только для обеспечения единообразия.
Содержание |
Требования
Следующие типы в совокупности называются тривиально копируемыми типами :
- скалярные типы
- тривиально копируемые классовые типы
- массивы таких типов
- cv-квалифицированные версии этих типов
Примечания
В общем случае, для любого тривиально копируемого типа
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 |
Смотрите также
|
(C++11)
|
проверяет, является ли тип тривиально копируемым
(шаблон класса) |