六一的部落格


关关难过关关过,前路漫漫亦灿灿。




隐式转换

类的转换构造函数如果非显式 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

支持运行时类型识别

和继承及运行时类型识别一起使用


类型转换



隐式转换

类的转换构造函数如果非显式 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

支持运行时类型识别

和继承及运行时类型识别一起使用