<type_traits>

类模板
<type_traits>

std::is_arithmetic

template <class T> struct is_arithmetic;
is_arithmetic 类型

如果 T 是算术类型(即整数类型或浮点类型),则为特征类。

它继承自 integral_constant,并根据T是一个算术类型

基本算术类型
整数类型bool
char
char16_t
char32_t
wchar_t
signed char
short int
int
long int
long long int
unsigned char
unsigned short int
unsigned int
unsigned long int
unsigned long long int
浮点类型float
double
long double

所有基本算术类型,以及它们的所有别名(如 cstdint 中的别名),都被此类视为算术类型,包括它们的 constvolatile 限定变体。

枚举在 C++ 中不被视为算术类型(参见 is_enum)。

这是一个复合类型特征,其行为与以下代码相同:
1
2
3
template<class T>
struct is_arithmetic : std::integral_constant < bool,
         is_integral<T>::value || is_floating_point<T>::value > {};

模板参数

T
一个类型。

成员类型

继承自 integral_constant
成员类型定义
value_typebool
类型true_type 或 false_type

成员常量

继承自 integral_constant
成员常量定义
truefalse

成员函数

继承自 integral_constant

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// is_arithmetic example
#include <iostream>
#include <type_traits>
#include <complex>

int main() {
  std::cout << std::boolalpha;
  std::cout << "is_arithmetic:" << std::endl;
  std::cout << "char: " << std::is_arithmetic<char>::value << std::endl;
  std::cout << "float: " << std::is_arithmetic<float>::value << std::endl;
  std::cout << "float*: " << std::is_arithmetic<float*>::value << std::endl;
  std::cout << "complex<double>: " << std::is_arithmetic<std::complex<double>>::value << std::endl;
  return 0;
}

输出
is_arithmetic:
char: true
float: true
float*: false
complex<double>: false


另见