make_unsigned

make_unsigned (부호 없는 정수형 얻기)

std::make_unsigned는 주어진 정수형이나 열거형에 대응하는 부호 없는 정수형을 구하는 클래스 템플릿이에요. 이 템플릿을 사용하면 부호 있는 타입을 같은 크기의 부호 없는 타입으로 변환할 수 있어요. C++11부터 사용할 수 있고, C++14부터는 make_unsigned_t 별칭 템플릿도 제공해요.

출처: cppreference

본문

<type_traits> 헤더에 정의되어 있어요.

<type_traits> 헤더에 정의됨
template < class T > struct make_unsigned ; (C++11부터)

T가 정수형(bool 제외) 또는 열거형이면, T에 대응하는 부호 없는 정수형으로 동일한 cv 한정자를 갖는 멤버 typedef type을 제공해요.

T가 signed 또는 unsigned char, short, int, long, long long이면, 이 목록에서 T에 대응하는 부호 없는 정수형이 제공돼요.

T가 열거형 또는 char, wchar_t, char8_t(C++20부터), char16_t, char32_t이면, T와 같은 sizeof를 가지면서 가장 작은 rank를 가진 부호 없는 정수형이 제공돼요.

그 외의 경우 동작은 정의되지 않아요. (C++20까지)
그 외의 경우 프로그램은 ill-formed예요. (C++20부터)

프로그램이 std::make_unsigned에 특수화를 추가하면 동작은 정의되지 않아요.

Member types

이름 정의
type T에 대응하는 부호 없는 정수형

Helper types

template < class T > using make_unsigned_t = typename make_unsigned < T >:: type ; (C++14부터)

Example

#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>
    );
}

See also

is_signed (C++11) 타입이 부호 있는 산술형인지 확인해요 (클래스 템플릿)
is_unsigned (C++11) 타입이 부호 없는 산술형인지 확인해요 (클래스 템플릿)
make_signed (C++11) 주어진 정수형에 대응하는 부호 있는 정수형을 얻어요 (클래스 템플릿)
make_signed (C++26) 반영된 정수형에 대응하는 부호 있는 정수형을 반환해요 (함수)
make_unsigned (C++26) 반영된 정수형에 대응하는 부호 없는 정수형을 반환해요 (함수)

더 알아보기 (Learn more)

cppreference