类型转换
2023年12月14日 2023年12月15日
隐式转换
类的转换构造函数如果非显式 explicit
, 可用作隐式转换规则
显式转换
强制类型转换
字段 | |
---|---|
type | 目标类型 |
cast-name | 显式转换的一种 |
expression | 要转换的值 |
1cast-name<type>(expression);
static_cast
用来改变表达式的类型
显式地执行某种定义明确的类型转换,常用于替代由编译器隐式执行的类型转换
- 类的显式转换构造函数用作转换规则
- 找回存在void*指针中的值
- 存在精度丢失时, 编译器不会告警
1int i, j; 2double slope = static_cast<double>(j) / i;
const_cast
指针和引用可以拥有底层const属性
const_cast用以移除或增加底层const属性, 即获取或关闭关联对象的写权限
当我们尝试获取关联对象的写权限时, 如果关联对象本身不具有顶层const, 该转换合法; 否则, 该行为将产生未定义的后果
常用于有函数重载的上下文中
1char c; 2const char *pc = &c; // 不可以通过pc修改c的值 3char *p = const_cast<char *>(pc); // 可以通过p修改c的值 4 5const char *pc2 = const_cast<const char *>(p); // 不可以通过pc2修改c的值
reinterpret_cast
更改读取内存的方式
把运算对象的内容解释成另一种类型
为运算对象的位模式提供较低层次上的重新解释
如报文: 报文保存在char数组中,根据报文格式, 可选择合适的指针来读取
1int *ip; 2char *pc = reinterpret_cast<char*>(ip);
dynamic_cast
支持运行时类型识别
和继承及运行时类型识别一起使用