C++的类型转换
目录
一、隐式类型转换的触发场景
1.基本数据类型间的转换
i.提升转换
ii.截断转换
2.类与对象的转换
i.单参数构造函数
ii.类型转换运算符
3.继承体系中的指针/引用转换
向上转型
二、隐式转换的风险与问题
1.意外行为
2.二义性错误
3.性能损耗
三、C++强制类型转换
1.static_cast 和 reinterpret_cast
2.const_cast
3.dynamic_cast
一、隐式类型转换的触发场景
1.基本数据类型间的转换
i.提升转换
int a = 5;
double b = a + 3.14; // a自动转换为double
ii.截断转换
double x = 9.99;
int y = x; // y = 9(丢弃小数部分)
2.类与对象的转换
i.单参数构造函数
:若类定义了接受单个参数的构造函数,可能发隐式转换。
ii.类型转换运算符
:通过 operator T()定义自定义隐式转换
3.继承体系中的指针/引用转换
向上转型
:派生类指针/引用自动转为基类类型
二、隐式转换的风险与问题
1.意外行为
字符串
"data.txt"
隐式转换为File
临时对象,函数结束后立即析构,可能导致资源提前释放。
2.二义性错误
3.性能损耗
隐式转换可能生成临时对象,增加拷贝开销。
三、C++强制类型转换
明确表明了类型转换的意图,增强了代码的可读性和可维护性,让其他开发者能清楚知道这里进行了类型转换。
1.static_cast 和 reinterpret_cast
2.const_cast
const_cast最常用的用途就是删除变量的const属性,方便赋值
在C++中,volatile关键字是一种类型修饰符,用于告诉编译器某个变量的值可能会随时发生变化,因此每次访问该变量时都需要从内存中读职,而不是使用寄存器中的缓存值。