C++中所有数据类型
在C++中,数据类型可以分为几大类,包括基本数据类型、复合数据类型和用户自定义数据类型。以下是对C++中常见数据类型的详细分类和说明:
1. 基本数据类型
基本数据类型是C++语言预定义的类型,用于表示简单的数据值。它们是C++中最基本的构建块。
1.1 整数类型
-
int
:用于表示整数。通常占用4字节(32位)。 -
short
:短整型,通常占用2字节。 -
long
:长整型,通常占用4字节或8字节(取决于平台)。 -
long long
:扩展的长整型,通常占用8字节。 -
unsigned
:无符号整型,表示非负整数。可以与int
、short
、long
、long long
结合使用,例如unsigned int
。 -
signed
:有符号整型,默认情况下int
、short
、long
、long long
都是有符号的。
.12 浮点类型
-
float
:单精度浮点数,通常占用4字节。 -
double
:双精度浮点数,通常占用8字节。 -
long double
:扩展精度浮点数,占用长度取决于平台,通常是12字节或16字节。
1.3 字符类型
-
char
:用于表示字符,通常占用1字节。可以存储ASCII字符。 -
wchar_t
:宽字符类型,用于存储宽字符(如Unicode字符),通常占用2字节或4字节。 -
char16_t
:16位字符类型,用于存储UTF-16编码的字符。 -
char32_t
:32位字符类型,用于存储UTF-32编码的字符。
1.4 布尔类型
-
bool
:用于表示布尔值,通常占用1字节。值为true
或false
。
1.5 空类型
-
void
:表示无类型,通常用于函数返回值或指针类型,表示“无”。
2. 复合数据类型
复合数据类型是由基本数据类型组合而成的复杂数据结构。
2.1 数组
-
数组是一组相同类型的元素的集合,通过索引访问每个元素。例如:
cpp复制
int arr[5]; // 一个包含5个整数的数组
2.2 结构体(struct
)
-
结构体是一种用户定义的数据类型,可以包含多个不同类型的成员变量。例如:
cpp复制
struct Person {string name;int age; };
2.3 联合体(union
)
-
联合体是一种特殊的数据类型,可以存储多个不同类型的成员变量,但同一时间只能存储其中一个。所有成员共享同一块内存。例如:
cpp复制
union Data {int i;float f; };
2.4 枚举(enum
)
-
枚举是一种用户定义的类型,用于定义一组命名的整数值。例如:
cpp复制
enum Color { RED, GREEN, BLUE };
2.5 类(class
)
-
类是一种用户定义的数据类型,可以包含成员变量和成员函数。类是面向对象编程的核心。例如:
cpp复制
class Student { public:string name;int age;void display() {cout << name << " is " << age << " years old." << endl;} };
3. 指针和引用
-
指针(
cpppointer
):指针是一个变量,用于存储另一个变量的内存地址。例如:复制
int* ptr; // 一个指向整数的指针
-
引用(
cppreference
):引用是一个变量的别名,用于为变量提供另一个名称。例如:复制
int a = 10; int& ref = a; // ref是a的引用
4. 用户自定义数据类型
用户可以通过typedef
或using
关键字定义自己的数据类型。
4.1 typedef
-
cpptypedef
用于为现有类型定义一个新的名称。例如:复制
typedef int Integer; Integer a = 10; // 等同于 int a = 10;
4.2 using
-
cppusing
是C++11引入的语法,用于定义别名。例如:复制
using Integer = int; Integer a = 10; // 等同于 int a = 10;
5. 其他数据类型
-
cppauto
:C++11引入的关键字,用于自动推导变量的类型。例如:复制
auto x = 10; // x的类型为int auto y = 3.14; // y的类型为double
-
cppdecltype
:C++11引入的关键字,用于获取表达式的类型。例如:复制
int a = 10; decltype(a) b = 20; // b的类型为int
6. 特殊数据类型
-
cppnullptr
:C++11引入的空指针常量,用于替代NULL
。例如:复制
int* ptr = nullptr;
-
std::nullptr_t
:nullptr
的类型,用于表示空指针类型。
这些是C++中常见的数据类型。每种数据类型都有其特定的用途和特点,合理使用它们可以帮助你更好地编写高效、可读性强的代码。
以下是我整理的表格:
表格
复制
类别 | 数据类型 | 描述 | 典型用途 | 大小(字节) |
---|---|---|---|---|
基本数据类型 | int | 有符号整数类型,用于表示整数。 | 一般整数运算 | 通常为4字节(32位) |
short | 有符号短整数类型,用于表示较小的整数。 | 存储较小的整数,节省内存 | 通常为2字节 | |
long | 有符号长整数类型,用于表示较大的整数。 | 存储较大的整数 | 通常为4字节或8字节(平台相关) | |
long long | 有符号扩展长整数类型,用于表示非常大的整数。 | 存储非常大的整数 | 通常为8字节 | |
unsigned int | 无符号整数类型,用于表示非负整数。 | 存储非负整数,范围比有符号整数大 | 通常为4字节 | |
float | 单精度浮点数类型,用于表示小数。 | 一般浮点运算 | 通常为4字节 | |
double | 双精度浮点数类型,用于表示更精确的小数。 | 需要更高精度的浮点运算 | 通常为8字节 | |
long double | 扩展精度浮点数类型,用于表示更高精度的小数。 | 需要极高精度的浮点运算 | 通常为12字节或16字节(平台相关) | |
char | 字符类型,用于表示单个字符。 | 存储ASCII字符 | 通常为1字节 | |
wchar_t | 宽字符类型,用于表示宽字符(如Unicode)。 | 存储宽字符 | 通常为2字节或4字节(平台相关) | |
char16_t | 16位字符类型,用于表示UTF-16编码的字符。 | 存储UTF-16字符 | 2字节 | |
char32_t | 32位字符类型,用于表示UTF-32编码的字符。 | 存储UTF-32字符 | 4字节 | |
bool | 布尔类型,用于表示逻辑值。 | 存储true 或false | 通常为1字节 | |
void | 空类型,表示无类型。 | 函数返回值或指针类型,表示“无” | 无大小 | |
复合数据类型 | 数组 | 一组相同类型的元素集合。 | 存储多个相同类型的数据,通过索引访问 | 根据数组大小和元素类型大小计算 |
结构体(struct ) | 用户定义的数据类型,包含多个不同类型的成员变量。 | 存储相关数据集合 | 根据成员变量大小计算 | |
联合体(union ) | 特殊数据类型,可以存储多个不同类型的成员变量,但同一时间只能存储其中一个。 | 存储多个变量,节省内存,但只能使用其中一个 | 根据最大成员变量大小计算 | |
枚举(enum ) | 用户定义的类型,用于定义一组命名的整数值。 | 定义一组相关的常量 | 通常为4字节(与int 相同) | |
类(class ) | 用户定义的数据类型,包含成员变量和成员函数。 | 面向对象编程,封装数据和行为 | 根据成员变量大小计算 | |
指针和引用 | 指针(pointer ) | 用于存储另一个变量的内存地址。 | 动态内存管理、函数参数传递等 | 通常为4字节或8字节(平台相关) |
引用(reference ) | 为变量提供别名。 | 函数参数传递、避免拷贝 | 与引用的变量占用相同大小的内存 | |
用户自定义 | typedef | 为现有类型定义一个新的名称。 | 简化类型名称 | 无大小 |
using | 为现有类型定义一个新的名称(C++11)。 | 简化类型名称 | 无大小 | |
其他类型 | auto | 自动推导变量的类型(C++11)。 | 自动推导变量类型 | 根据推导的类型大小计算 |
decltype | 获取表达式的类型(C++11)。 | 获取表达式的类型 | 根据表达式的类型大小计算 | |
nullptr | 空指针常量(C++11)。 | 表示空指针 | 通常为4字节或8字节(平台相关) | |
std::nullptr_t | nullptr 的类型。 | 表示空指针类型 | 通常为4字节或8字节(平台相关) |