Поддержка типов (базовые типы, RTTI, свойства типов)
(Смотрите также тип для обзора системы типов.)
[править] Базовые типы
[править] Основные типы, определяемые языком
[править] Дополнительные базовые типы и макросы
Определены в заголовочном файле
<cstddef> | |
беззнаковый целочисленный тип, возвращаемый оператором sizeof (определение типа) | |
знаковый целочисленный тип, возвращаемый при вычитании двух указателей (определение типа) | |
(C++11) |
тип литерала нулевого указателя nullptr (определение типа) |
определяемая реализацией константа для нулевого указателя (макроконстанта) | |
(C++11) |
тривиальный тип с такими же высокими требованиями к выравниванию, как и у любого другого скалярного типа (определение типа) |
смещение в байтах от начала типа со стандартной компоновкой до указанного элемента (функция-макрос) | |
(C++17) |
тип byte (перечисление) |
Определены в заголовочном файле
<cstdbool> | |
Определены в заголовочном файле
<stdbool.h> | |
__bool_true_false_are_defined (C++11)(устарело) |
макроконстанта совместимости с C, расширяется в целочисленный литерал 1 (макроконстанта) |
Определены в заголовочном файле
<cstdalign> | |
Определены в заголовочном файле
<stdalign.h> | |
__alignas_is_defined (C++11)(устарело) |
макроконстанта совместимости с C, расширяется в целочисленный литерал 1 (макроконстанта) |
[править] Целочисленные типы фиксированной ширины (начиная с C++11)
[править] Типы с плавающей запятой фиксированной ширины (начиная с C++23)
[править] Числовые ограничения
Определены в заголовочном файле
<limits> | |
предоставляет интерфейс для запроса свойств всех основных числовых типов. (шаблон класса) |
[править] Интерфейс числовых ограничений C
[править] Идентификация типа времени выполнения
Определены в заголовочном файле
<typeinfo> | |
содержит некоторую информацию о типе, сгенерированную реализацией. Это класс, возвращаемый оператором typeid. (класс) | |
исключение, которое возникает, если аргумент в операторе typeid равен null (класс) | |
исключение, вызванное недопустимым выражением dynamic_cast, т.е. приведение ссылочного типа не выполняется (класс) | |
Определены в заголовочном файле
<typeindex> | |
(C++11) |
оболочка вокруг объекта type_info , которая может использоваться в качестве индекса в ассоциативных и неупорядоченных ассоциативных контейнерах (класс) |
[править] Свойства типов (начиная с C++11)
Свойства типов определяют интерфейс на основе шаблона времени компиляции для запроса или изменения их свойств.
Попытка специализации шаблона, определённого в заголовке <type_traits>, приводит к неопределённому поведению, за исключением того, что std::common_type может быть специализирован, как описано в его описании.
Шаблон, определённый в заголовке <type_traits> может быть создан с неполным типом, если не указано иное, несмотря на общий запрет на создание экземпляров стандартных библиотечных шаблонов с неполными типами.
[править] Характеристики типов
Определены в заголовочном файле
<type_traits> | |
Категории основных типов | |
(C++11) |
проверяет, является ли тип void (шаблон класса) |
(C++14) |
проверяет, является ли тип std::nullptr_t (шаблон класса) |
(C++11) |
проверяет, является ли тип целочисленным типом (шаблон класса) |
(C++11) |
проверяет, является ли тип типом с плавающей запятой (шаблон класса) |
(C++11) |
проверяет, является ли тип типом массива (шаблон класса) |
(C++11) |
проверяет, является ли тип типом перечисления (шаблон класса) |
(C++11) |
проверяет, является ли тип типом объединения (шаблон класса) |
(C++11) |
проверяет, является ли тип типом класса не объединения (шаблон класса) |
(C++11) |
проверяет, является ли тип типом функции (шаблон класса) |
(C++11) |
проверяет, является ли тип типом указателя (шаблон класса) |
(C++11) |
проверяет, является ли тип левосторонней ссылкой (шаблон класса) |
(C++11) |
проверяет, является ли тип правосторонней ссылкой (шаблон класса) |
(C++11) |
проверяет, является ли тип указателем на нестатический объект-элемент (шаблон класса) |
(C++11) |
проверяет, является ли тип указателем на нестатическую функцию-элемент (шаблон класса) |
Категории составных типов | |
(C++11) |
проверяет, является ли тип фундаментальным типом (шаблон класса) |
(C++11) |
проверяет, является ли тип арифметическим типом (шаблон класса) |
(C++11) |
проверяет, является ли тип целочисленным типом (шаблон класса) |
(C++11) |
проверяет, является ли тип объектным типом (шаблон класса) |
(C++11) |
проверяет, является ли тип составным типом (шаблон класса) |
(C++11) |
проверяет, является ли тип либо левосторонней ссылкой, либо правосторонней ссылкой (шаблон класса) |
(C++11) |
проверяет, является ли тип указателем на нестатическую функцию-элемент или объект-элемент (шаблон класса) |
Характеристики типов | |
(C++11) |
проверяет, является ли тип квалифицированным как const (шаблон класса) |
(C++11) |
проверяет, является ли тип volatile квалифицированным (шаблон класса) |
(C++11) |
проверяет, является ли тип тривиальным (шаблон класса) |
(C++11) |
проверяет, можно ли тривиально скопировать тип (шаблон класса) |
(C++11) |
проверяет, является ли тип типом со стандартной компоновкой (шаблон класса) |
(C++11)(устарело в C++20) |
проверяет, является ли тип типом данных с простой структурой (POD) (шаблон класса) |
(C++11)(устарело в C++17)(удалено в C++20) |
проверяет, является ли тип литеральным (шаблон класса) |
проверяет, влияет ли каждый бит в представлении объекта типа на его значение (шаблон класса) | |
(C++11) |
проверяет, является ли тип классовым типом (но не объединением) и не имеет нестатических элементов данных (шаблон класса) |
(C++11) |
проверяет, является ли тип типом полиморфного класса (шаблон класса) |
(C++11) |
проверяет, является ли тип типом абстрактного класса (шаблон класса) |
(C++14) |
проверяет, является ли тип окончательным классовым типом (шаблон класса) |
(C++17) |
проверяет, является ли тип агрегатным типом (шаблон класса) |
(C++11) |
проверяет, является ли тип арифметическим типом со знаком (шаблон класса) |
(C++11) |
проверяет, является ли тип беззнаковым арифметическим типом (шаблон класса) |
(C++20) |
проверяет, является ли тип типом массива с известной границей (шаблон класса) |
(C++20) |
проверяет, является ли тип типом массива с неизвестной границей (шаблон класса) |
(C++23) |
проверяет, является ли тип типом перечисления с ограниченной областью видимости (шаблон класса) |
Поддерживаемые операции | |
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа конструктор для определённых аргументов (шаблон класса) |
проверяет, есть ли у типа конструктор по умолчанию (шаблон класса) | |
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа конструктор копирования (шаблон класса) |
(C++11)(C++11)(C++11) |
проверяет, может ли тип быть сконструирован из правосторонней ссылки (шаблон класса) |
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа оператор присваивания для определённого аргумента (шаблон класса) |
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа оператор присваивания копированием (шаблон класса) |
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа оператор присваивания перемещением (шаблон класса) |
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа неудалённый деструктор (шаблон класса) |
(C++11) |
проверяет, есть ли у типа виртуальный деструктор (шаблон класса) |
(C++17)(C++17)(C++17)(C++17) |
проверяет, можно ли объекты одного типа обменять с объектами того же или другого типа (шаблон класса) |
Запросы характеристик | |
(C++11) |
получает требования к выравниванию типа (шаблон класса) |
(C++11) |
получает количество измерений типа, являющегося массивом (шаблон класса) |
(C++11) |
получает размер типа массива по указанному измерению (шаблон класса) |
Отношения типов | |
(C++11) |
проверяет, являются ли два типа одним и тем же типом (шаблон класса) |
(C++11) |
проверяет, является ли тип производным от другого типа (шаблон класса) |
(C++11)(C++20) |
проверяет, можно ли преобразовать тип в другой тип (шаблон класса) |
проверяет, может ли тип быть вызван (как если бы std::invoke) с заданными типами аргументов (шаблон класса) | |
(C++20) |
проверяет, являются ли два типа совместимыми по компоновке (шаблон класса) |
проверяет, является ли тип взаимопреобразуемым по указателю (изначально) базовым классом другого типа (шаблон класса) | |
проверяет, являются ли объекты типа взаимопреобразуемыми по указателю с указанным подобъектом этого типа (шаблон функции) | |
(C++20) |
проверяет, соответствуют ли два указанных элемента друг другу в общей начальной подпоследовательности двух указанных типов (шаблон функции) |
[править] Модификации типов
Шаблоны изменения типов создают новые определения типов, применяя изменения к параметру шаблона. Затем к результирующему типу можно получить доступ через элемент type
typedef’а.
Определены в заголовочном файле
<type_traits> | |
Спецификаторы const-volatility | |
(C++11)(C++11)(C++11) |
удаляет спецификаторы const и/или volatile из данного типа (шаблон класса) |
(C++11)(C++11)(C++11) |
добавляет спецификаторы const и/или volatile к данному типу (шаблон класса) |
Ссылки | |
(C++11) |
удаляет ссылку из данного типа (шаблон класса) |
(C++11)(C++11) |
добавляет левостороннюю или правостороннюю ссылку к данному типу (шаблон класса) |
Указатели | |
(C++11) |
удаляет указатель из данного типа (шаблон класса) |
(C++11) |
добавляет указатель в данный тип (шаблон класса) |
Модификаторы знаков | |
(C++11) |
делает данный целочисленный тип знаковым (шаблон класса) |
(C++11) |
делает данный целочисленный тип беззнаковым (шаблон класса) |
Массивы | |
(C++11) |
удаляет одну размерность из данного типа массива (шаблон класса) |
(C++11) |
удаляет все измерения из данного типа массива (шаблон класса) |
[править] Разные преобразования
Определены в заголовочном файле
<type_traits> | |
(C++11)(устарело в C++23) |
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера (шаблон класса) |
(C++11)(устарело в C++23) |
определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех данных типов (шаблон класса) |
(C++11) |
применяет преобразования типов, как при передаче аргумента функции по значению (шаблон класса) |
(C++20) |
объединяет std::remove_cv и std::remove_reference (шаблон класса) |
(C++11) |
условно удаляет перегрузку функции или специализацию шаблона из разрешения перегрузки (шаблон класса) |
(C++11) |
выбирает тот или иной тип на основе логического значения времени компиляции (шаблон класса) |
(C++11) |
определяет общий тип группы типов (шаблон класса) |
определяет общий ссылочный тип группы типов (шаблон класса) | |
(C++11) |
получает базовый целочисленный тип для данного типа перечисления (шаблон класса) |
(C++11)(удалено в C++20)(C++17) |
выводит тип результата вызова вызываемого объекта с набором аргументов (шаблон класса) |
(C++17) |
псевдоним шаблона с переменным числом аргументов типа void (псевдоним шаблона) |
(C++20) |
возвращает аргумент тип без изменений (шаблон класса) |
[править] Операции над свойствами
Определены в заголовочном файле
<type_traits> | |
(C++17) |
вариативная логическая метафункция И (шаблон класса) |
(C++17) |
вариативная логическая метафункция ИЛИ (шаблон класса) |
(C++17) |
логическая метафункция НЕ (шаблон класса) |
[править] Вспомогательные классы
Определены в заголовочном файле
<type_traits> | |
(C++11)(C++17) |
константа времени компиляции указанного типа с указанным значением (шаблон класса) |
Предусмотрены две специализации std::integral_constant для типа bool:
Определены в заголовочном файле
<type_traits> | |
Тип | Определение |
true_type
|
std::integral_constant<bool, true> |
false_type
|
std::integral_constant<bool, false> |
[править] Контекст вычисления константы (начиная с C++20)
Определены в заголовочном файле
<type_traits> | |
(C++20) |
определяет, происходит ли вызов в контексте вычисления константы (функция) |
[править] Смотрите также
Документация C по Библиотека поддержки типов
|