Spec-Zone.ru › C++

Именованные требования C++: TriviallyCopyable (начиная с C++11)

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

Требования

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

  • скалярные типы
  • типы классов, тривиально копируемых
  • массивы таких типов
  • версии этих типов с квалификаторами cv

Примечания

В общем случае для любого тривиально копируемого типа T и объекта obj1 типа T базовые байты obj1 можно скопировать в массив char или unsignedchar, или 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 POD в C++03 с удалённым нетривиальным оператором присваивания не считался тривиальным удалённые конструкторы/операторы разрешены
CWG 2094 C++11 volatile-скалярные типы не являются тривиально копируемыми (CWG 1746) стали тривиально копируемыми

См. также

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

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

Spec-Zone.ru

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