<type_traits>

类模板
<type_traits>

std::make_unsigned

template <class T> struct make_unsigned;
Make unsigned
Obtains the unsigned type corresponding toT, keeping any cv-qualifiers.

转换后的类型别名为成员类型make_unsigned::type如下
  • 如果已知Tis a signed integral type, this is the corresponding unsigned type.
  • 如果已知Tis already an unsigned integral type, this isT不变。
  • 如果已知Tis an enumeration type, this is the smallest unsigned integer type with the same size asT(as persizeofoperator).

Notice that this class merely obtains a type using another type as model, but it does not transform values or objects between those types. To explicitly cast an integral type to its unsigned equivalent, you can usestatic_cast.

模板参数

T
An integer type (exceptbool), or an enumeration type.

成员类型

成员类型定义
类型Unsigned type corresponding toT.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// make_unsigned
#include <iostream>
#include <type_traits>

enum ENUM1 {a,b,c};
enum class ENUM2 : char {a,b,c};

int main() {
  typedef std::make_unsigned<int>::type A;                // unsigned int
  typedef std::make_unsigned<unsigned>::type B;           // unsigned int
  typedef std::make_unsigned<const unsigned>::type C;     // const unsigned int
  typedef std::make_unsigned<ENUM1>::type D;              // unsigned int
  typedef std::make_unsigned<ENUM2>::type E;              // unsigned char

  std::cout << std::boolalpha;
  std::cout << "typedefs of unsigned int:" << std::endl;
  std::cout << "A: " << std::is_same<unsigned,A>::value << std::endl;
  std::cout << "B: " << std::is_same<unsigned,B>::value << std::endl;
  std::cout << "C: " << std::is_same<unsigned,C>::value << std::endl;
  std::cout << "D: " << std::is_same<unsigned,D>::value << std::endl;
  std::cout << "E: " << std::is_same<unsigned,E>::value << std::endl;

  return 0;
}

输出
typedefs of unsigned int:
A: true
B: true
C: false
D: true
E: false


另见