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

std::underlying_type

Материал из 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 underlying_type;
(начиная с C++11)

Если T является полным типом перечисления, то предоставляет определение типа в члене type, которое будет равно внутрилежащему типу для T, иначе поведение будет не определено.

Содержание

[править] Тип-член

Имя Определение
type Внутрилежащий тип для T

[править] Вспомогательный тип

template< class T >
using underlying_type_t = typename underlying_type<T>::type;
(начиная с C++14)

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

Каждый тип перечисление имеет "внутрилежащий" тип, который может быть

1. Указан явно (как для глобальных, так и для типизированный перечислений)

2. Неявно, в этом случае он будет равен int для типизированных перечислений и зависимым от реализации целочисленным типом для глобальных перечислений.

[править] Отчёт о ошибках

Следующее изменение поведения применено с обратной силой к предыдущему стандарту C++, который был опубликован:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2396 C++11 Неполные типы перечислений были разрешены Полные типы перечислений необходимы

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

#include <iostream>
#include <type_traits>
 
enum e1 {};
enum class e2: int {};
 
int main() {
    bool e1_type = std::is_same<
        unsigned
       ,typename std::underlying_type<e1>::type
    >::value; 
 
    bool e2_type = std::is_same<
        int
       ,typename std::underlying_type<e2>::type
    >::value;
 
    std::cout
    << "Внутрилежащий тип для 'e1' является " << (e1_type?"unsigned":"non-unsigned") << '\n'
    << "Внутрилежащий тип для 'e2' является " << (e2_type?"int":"non-int") << '\n';
}

Вывод:

Внутрилежащий тип для 'e1' является unsigned
Внутрилежащий тип для 'e2' является int