目录:
初始化和赋值语句是程序中最基本的操作;其功能为将某个值与一个对象关联起来;
值和标识符
- 值:
- 字面值:例如数值、字符等直接表示的值。
- 对象:变量或常量所表示的值。
- 标识符:
- 变量、常量、引用等名称。
初始化基本操作
-
在内存中开辟空间,保存相应的数值:
- 当我们声明一个变量时,系统会在内存中为这个变量分配空间,并保存这个变量的值。
- 例如,声明一个整数变量并赋值:
-
int x = 10; // 在内存中开辟空间并存储数值10
在编译器中构造符号表,将标识符与相关内存空间关联起来:
- 编译器会创建一个符号表,将变量名(标识符)与其在内存中的地址关联起来。
- 例如,声明一个变量时,编译器会记录变量名和内存地址:
-
int y = 20; // 编译器将变量名y与其内存地址关联
值与对象都有类型:
- 变量、常量、引用等在声明时都需要指定类型,这有助于编译器进行类型检查和内存分配。
-
double pi = 3.14; // pi是一个double类型的变量
类型转换
- 初始化和赋值可能涉及到类型转换:
- 在某些情况下,可能需要将一个类型的值转换为另一个类型,以确保操作的正确性和兼容性。
- 例如,将整数转换为浮点数:
-
int a = 5; float b = static_cast<float>(a); // 将整数a转换为浮点数
-
类型是一个编译期概念,可执行文件中不存在类型的概念:
- 在C++中,类型是一个编译时的概念,用于在编译时检查数据的正确性和一致性。然而,一旦程序被编译成可执行文件,类型信息就不再存在。这意味着类型检查在编译期完成,而不是在运行时。
-
C++ 是强类型语言:
- C++是一种强类型语言,意味着变量在使用之前必须先声明其类型,且类型转换必须是显式的。这有助于防止类型错误和提高代码的安全性。
-
引入类型是为了更好地描述程序,防止误用:
- 使用类型可以更清晰地描述程序的意图,并防止数据被误用。例如,使用类型可以防止将整数误用为浮点数或将字符误用为字符串。
-
类型描述了:
- 存储所需要的尺寸 (sizeof,标准并没有严格限制):
sizeof
运算符用于确定某种类型或变量所占用的字节数。标准虽然没有严格限制,但通常会有特定的实现方式。
- 取值空间 (std::numeric_limits,超过范围可能产生溢出):
std::numeric_limits
模板类提供了有关类型的极限值的信息,如最大值和最小值。如果变量取值超过其类型范围,可能会产生溢出,导致不可预测的行为。
- 对齐信息 (alignof):
alignof
运算符用于获取类型的对齐要求。对齐是指数据在内存中的存储方式,以提高访问效率。
- 可以执行的操作:
- 类型还决定了可以对变量执行哪些操作。例如,整数可以进行加减乘除运算,而字符可以进行比较操作等。
- 存储所需要的尺寸 (sizeof,标准并没有严格限制):
基本类型
基本类型是 C++ 语言中所支持的原始类型,主要包括以下几类:
数值类型
-
字符类型
char
: 基本字符类型,通常占用 1 个字节。wchar_t
: 宽字符类型,支持多字节字符。char16_t
: 16 位字符类型,通常用于 UTF-16 编码。char32_t
: 32 位字符类型,通常用于 UTF-32 编码。
-
整数类型
- 带符号整数类型
short
: 短整型。通常占用 2 个字节。int
: 整型。通常占用 4 个字节。long
: 长整型。long long
: 更长的整型,通常占用 8 个字节。
- 无符号整数类型
unsigned short
: 无符号短整型。unsigned int
: 无符号整型。unsigned long
: 无符号长整型。unsigned long long
: 无符号更长的整型。
- 带符号整数类型
-
浮点类型
float
: 单精度浮点型。double
: 双精度浮点型。long double
: 长双精度浮点型。-
float: 单精度浮点型
- 单精度浮点型(Single Precision Floating Point)
- 通常占用 4 个字节(32 位)的内存。
- 能够表示的数值范围较大,但有效精度相对较低,一般可以精确到小数点后 6-7 位。
- 用于在内存和计算性能要求较高的情况下表示浮点数。
-
double: 双精度浮点型
- 双精度浮点型(Double Precision Floating Point)
- 通常占用 8 个字节(64 位)的内存。
- 能够表示的数值范围更大,且有效精度较高,一般可以精确到小数点后 15-16 位。
- 用于需要高精度和广泛数值范围的计算场合。
-
void
void
: 用于表示没有类型,一般用于函数的返回类型,表示该函数不返回值。
复杂类型
复杂类型是由基本类型组合、变种所产生的类型,可能是标准库引入的类型,或者是用户定义的类型。这些类型通常包括:
-
数组类型
- 定长数组和变长数组。
-
指针类型
- 指向基本类型或复杂类型的指针。
-
引用类型
- 对基本类型或复杂类型的引用。
-
结构体和类
- 用户定义的数据结构,可以包含基本类型和其他复杂类型的组合。
-
联合体
- 允许在相同的内存位置存储不同类型的数据。
-
枚举类型
- 定义一组命名的常量,通常用于表示离散的选项。
-
函数类型
- 用于定义函数的参数和返回类型。
-
模板类型
- 用于泛型编程,可以用于定义参数化类型。
通过理解基本类型和复杂类型的分类,可以更好地描述和使用 C++ 语言中的数据类型,编写类型安全的代码。