C++ Primer Rush 2.1基本内置类型

2.1 基本内置类型

C++定义了一套包括算数类型arithmetic type)和空类型void)在内的基本数据类型。其中算数类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时,使用空类型作为返回类型。

2.1.1算数类型

算数类型分为两类:整型integral type,包括字符和布尔类型在内)和浮点型

算数类型的尺寸(也就是该类型数据所占的比特数)在不同机器上有所差别。表2.1列出了C++标准规定的尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。某一类型所占的比特数不同,他所能表示的数据范围也不一样。

表2.1:C++:算数类型
类型 含义

最小尺寸

bool 布尔类型 未定义
char 字符 8位
wchar_t 宽字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 32位
short 短整型 16位
int 整型 16位
long 长整型 32位
long long 长整型 64位
float 单精度浮点数 6位有效数字
double 双精度浮点数

10位有效数字

long double 扩展精度浮点数 10位有效数字

 

建议:如何选择类型

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

 

2.1.3 字面值常量

指定字面值的类型

通过前缀和后缀可以改变整型、浮点型和字符型字面值的默认类型

L'a' 宽字符型字面值,类型是 wchar_t
u8"hi!" utf-8 字符串字面值( utf-8 用 8 位编码一个Unicode字符)
42ULL 无符号整型字面值,类型是 unsigned long long
1E-3F 当精度浮点型字面值,类型是float
3.14159L 扩展精度浮点型字面值,类型是 long double
字符和字符串字面值
前缀 含义 类型
u Unicode 16 字符 char16_t
U Unicode 32 字符 char32_t
L 宽字符 wchar_t
u8 UTF-8(仅用于字符串字面常量) char

 

整型字面值
后缀 最小匹配类型
u or U unsigned
l or L long
ll or LL long long

 

浮点型字面值
后缀 类型
f or F float
l or L long double

 

布尔字面值和指针字面值

true 和 false 是布尔类型的字面值:

bool test = false;

nullptr 是指针字面值(2.3.2节将有更多关于指针和指针字面值的介绍)

你可能感兴趣的:(C++,C++)