std::make_unsigned
Материал из cppreference.com
Определено в заголовочном файле <type_traits>
|
||
template< class T > struct make_unsigned; |
(начиная с C++11) | |
Если T
является целым числом (кроме bool) или типом перечисления, предоставляет typedef элемент type
, который представляет собой целочисленный тип без знака, соответствующий T
с теми же cv-квалификаторами.
Если T
со знаком или без знака char, short, int, long, long long; предоставляет беззнаковый тип из этого списка, соответствующий T
.
Если T
является типом перечисления или char, wchar_t, char8_t (начиная с C++20), char16_t, char32_t; предоставляет целочисленный тип без знака с наименьшим рангом, имеющим тот же sizeof
, что и T
.
Иначе поведение не определено. |
(до C++20) |
Иначе программа некорректна. |
(начиная с C++20) |
Поведение программы, добавляющей специализации для std::make_unsigned
не определено.
Содержание |
[править] Типы-элементы
Имя | Определение |
type
|
беззнаковый целочисленный тип, соответствующий T
|
[править] Вспомогательные типы
template< class T > using make_unsigned_t = typename make_unsigned<T>::type; |
(начиная с C++14) | |
[править] Пример
Запустить этот код
#include <type_traits> int main() { using uchar_type = std::make_unsigned_t<char>; using uint_type = std::make_unsigned_t<int>; using ulong_type = std::make_unsigned_t<volatile long>; static_assert( std::is_same_v<uchar_type, unsigned char> and std::is_same_v<uint_type, unsigned int> and std::is_same_v<ulong_type, volatile unsigned long> ); }
[править] Смотрите также
(C++11) |
проверяет, является ли тип арифметическим типом со знаком (шаблон класса) |
(C++11) |
проверяет, является ли тип беззнаковым арифметическим типом (шаблон класса) |
(C++11) |
делает данный целочисленный тип знаковым (шаблон класса) |