[[C++学习第二弹:C++的基础语法]]中提到了类型这一概念,在使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当我们创建一个变量时,就会在内存中保留一些空间。我们可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。

基本内置类型:

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

算术类型:

算术类型分为两类:整型(integral type)和浮点型。其中,字符和布尔类型属于整形。

算术类型的尺寸在不同机器上有差别,下面是C++标准规定的尺寸的最小值。

数据类型 描述 大小(字节) 范围/取值示例
bool 布尔类型,表示真或假 1 true 或 false
char 字符类型,通常用于存储 ASCII 字符 1 -128 到 127 或 0 到 255
signed char 有符号字符类型 1 -128 到 127
unsigned char 无符号字符类型 1 0 到 255
wchar_t 宽字符类型,用于存储 Unicode 字符 2 或 4 取决于平台
char16_t 16 位 Unicode 字符类型(C++11 引入) 2 0 到 65,535
char32_t 32 位 Unicode 字符类型(C++11 引入) 4 0 到 4,294,967,295
short 短整型 2 -32,768 到 32,767
unsigned short 无符号短整型 2 0 到 65,535
int 整型 4 -2,147,483,648 到 2,147,483,647
unsigned int 无符号整型 4 0 到 4,294,967,295
long 长整型 4 或 8 取决于平台
unsigned long 无符号长整型 4 或 8 取决于平台
long long 长长整型(C++11 引入) 8 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long long 无符号长长整型(C++11 引入) 8 0 到 18,446,744,073,709,551,615
float 单精度浮点数 4 约 ±3.4e±38(6-7 位有效数字)
double 双精度浮点数 8 约 ±1.7e±308(15 位有效数字)
long double 扩展精度浮点数 8、12 或 16 取决于平台
  • 布尔值(bool)的取值是真(true)或假(false)。
  • 一个char的大小和一个机器字节一样。
  • 一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。 大多数编译器实现了浮点型的更高的精确度。

带符号类型和无符号类型:

除去布尔型和扩展字符型,其他的整型可以划分为带符号的和无符号的。带符号类型可以表示正数、负数和0,无符号类型仅能表示非负数。

类型int、short、long和long long都是带符号的,通过在这些类型名前添加unsigned就可以得到无符号类型。

与其他整型不同,字符型被分为:char、signed charunsigned char三种。但要注意,char与signed char不同,类型char实际上会表现为带符号的或不带符号的,这取决于编译器。

如何选择基本类型:

  • 明确知晓数值不可能为负时,使用无符号类型。
  • 使用int进行数值运算时,short一般太小,long和int差不多,因此数值超过int时直接使用long long。
  • 在算数表达式中不要使用char和bool。
  • 执行浮点数运算选用double。

派生数据类型:

数据类型 描述 示例
数组 相同类型元素的集合 int arr[5] = {1, 2, 3, 4, 5};
指针 存储变量内存地址的类型 int* ptr = &x;
引用 变量的别名 int& ref = x;
函数 函数类型,表示函数的签名 int func(int a, int b);
结构体 用户定义的数据类型,可以包含多个不同类型的成员 struct Point { int x; int y; };
用户定义的数据类型,支持封装、继承和多态 class MyClass { ... };
联合体 多个成员共享同一块内存 union Data { int i; float f; };
枚举 用户定义的整数常量集合 enum Color { RED, GREEN, BLUE };

小结:学习了C++的基本数据类型和使用方法。