Spec-Zone.ru › C++

C++ именованные требования: TriviallyCopyable (с 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 Применено к Поведение, как опубликовано Правильное поведение
CWG 1734 C++11 C++03 POD с удалённой нетривиальной операцией присваивания не был тривиальным разрешённые конструкторы/операторы
CWG 2094 C++11 Скалярные типы volatile не являются тривиально копируемыми (CWG 1746) сделаны тривиально копируемыми

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/TriviallyCopyable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API