std::make_unsigned
Определено в заголовке <type_traits> | ||
|---|---|---|
template< class T > struct make_unsigned; | (начиная с C++11) |
Если T является целочисленным (за исключением bool) или перечислимым типом, предоставляет псевдоним типа-члена type, который является соответствующим беззнаковым целочисленным типом для T с теми же cv-квалификаторами.
Если T является знаковым или беззнаковым типом char, short, int, long, longlong, предоставляется соответствующий 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) | получает соответствующий знаковый тип для заданного целочисленного типа (шаблон класса) |
|
(C++26) | возвращает соответствующий знаковый тип для отражённого целочисленного типа (функция) |
|
(C++26) | возвращает соответствующий беззнаковый тип для отражённого целочисленного типа (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/make_unsigned