C++ 中定义了包括 算术类型空类型 在内的数据类型,空类型一般只用于特定的场合,例如在程序运行完毕后补要求返回任何值时,可对函数类型用空类型,算术类型总的来说包括两个方面:整型(包括字符型以及布尔型在内) 和 浮点型,C++ 标准只是规定了算术类型所占的最小比特位:

不同的编译器可以给予这些算术类型比以上这些标准尺寸更大的不同尺寸,对于算术类型,需要强调的有以下几点:

  1. bool 类型只有两个值,非真(1)即假(0),当给一个布尔类型赋一个非零值时,统统按 真(1) 对待,只有赋 0 时,才是 假(0)
  2. int、short、long、long long 全是带符号类型,需要无符号类型时在它的前面加上 unsigned 即可,unsigned int 也通常写作 unsigned
  3. 字符型被分为 char、unsigned char 和 signed char 三种,特别需要注意的是, char 和 signed char 并不一样,尽管字符型有三种,但是字符的表现形式却只有两种:带符号的和无符号的,类型 char 实际上会表现为以上两种形式之一,具体哪种由编译器决定

如何选择类型:

  • 当明确知道数值不可能为负时,选择无符号类型
  • 使用 int 执行整数运算,在实际应用中,short 常常显得太小而 long 一般和 int 有一样的尺寸,如果你的数值超过了 int 的表示范围,选用 long long
  • 在算术表达式中不要使用 char 或者 bool,只有在存放字符或者布尔值时才使用它们,因为类型 char 在一些机器上是有符号的,而在另一些机器上又是无符号的,所以如果使用 char 进行运算特别容易出问题,如果你需要使用一个不大的整数,那么明确指定它的类型是 signed char 或者 unsigned char
  • 执行浮点数运算选用 double ,这是因为 float 通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几,事实上,对于某些机器来说,双精度运算甚至比单精度还快,long double 提供的精度在一般情况下是没有必要的,况且它所带来的运算时消耗是不能被忽略的

参考了 C++ Primer中文版第5版