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

std::is_trivially_copyable

Материал из cppreference.com
< cpp‎ | types
 
 
 
Поддержка типов
Основные типы
Оригинал:
Basic types
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Основные типы
Исправлены типы целых ширину (C++11)
Числовые пределы
Оригинал:
Numeric limits
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
С числовым ограничивает интерфейс
Время тип информации
Оригинал:
Runtime type information
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип черты
Оригинал:
Type traits
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Первичные категории типа
Оригинал:
Primary type categories
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип свойства
Оригинал:
Type properties
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Поддерживаемые операции
Оригинал:
Supported operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Отношения собственности и запросов
Оригинал:
Relationships and property queries
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип модификаций
Оригинал:
Type modifications
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Тип преобразования
Оригинал:
Type transformations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Характеристики типов констант
Оригинал:
Type trait constants
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
 
Defined in header <type_traits>
template< class T >
struct is_trivially_copyable;
(начиная с C++11)

Если T является TriviallyCopyable (тривиальнокопируемым) типом , то предоставляется константа-член value, которая будет равна true. Для всех остальных типом она будет равна false.

Тривиально копируемыми типами могут быть скалярные типы, тривиальнокопируемые классы, массивы с такими объектами (с возможным квалификатором const, но не volatile).

Класс называется тривиальнокопируемым, если он:

  1. Не имеет нетривиальный конструктор копирования (также требуется, чтобы не было виртуальных функций или виртуальных базовых классов)
  2. Не имеет нетривиальный конструктор перемещения
  3. Не имеет нетривиальную операцию копирующего равно
  4. Не имеет нетривиальную операцию переместительного равно
  5. Имеет тривиальный деструктор

Поведение не определено, если std::remove_all_extents_t<T> является неполным типом и не (с возможными cv-квалификаторами) void.

Содержание

[править] Аргумент шаблона

T Тип для проверки

[править] Вспомогательная шаблонная переменная

template< class T >
constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
(начиная с C++17)

Унаследован от std::integral_constant

Константы-члены

value
[static]
true, если T является тривиальнокопируемым типом , иначе false
(public static константа-член)

Функции-члены

operator bool
Преобразует объект в bool, возвращается value
(public функция-член)
operator()
(C++14)
Возвращает value
(public функция-член)

Типы-члены

Тип Определение
value_type bool
type std::integral_constant<bool, value>

[править] Примечание

Только объекты тривиальнокопируемых типов в С++ могут безопасно скопироваться с помощью std::memcpy или сериализовываться в/из бинарного файла с помощью std::ofstream::write()/std::ifstream::read(). В общем, тривиальнокопируемый тип - это тип, байты которого можно скопировать в массив char или unsigned char и потом преобразовать в новый объект того же типа и при этом полученный объект должен иметь такое же содержимое, что и у исходного.

[править] Пример

#include <iostream>
#include <type_traits>
 
struct A {
    int m;
};
 
struct B {
    B(const B&) {}
};
 
struct C {
    virtual void foo();
};
 
int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_trivially_copyable<A>::value << '\n';
    std::cout << std::is_trivially_copyable<B>::value << '\n';
    std::cout << std::is_trivially_copyable<C>::value << '\n';
}

Вывод:

true
false
false

[править] См. также

Проверяет является ли тип тривиальным или нет
(шаблон класса) [править]
Шаблонная переменная, являющая псевдонимом для std::is_trivially_copyable::value
(шаблонная переменная) [править]