没有网站怎么做推广,wordpress媒体库插件,网站建设的项目方案,视频号怎么运营我们先来回忆以下#xff0c;C 语言的强制类型转换形式#xff1a;(type) expr;这种旧式强制类型转换从表现形式上来说不够清晰明了#xff0c;容易看漏#xff0c;一旦转换过程出现问题#xff0c;追踪起来也就更加困难。为了解决以上问题#xff0c;C不仅兼容了C的强制… 我们先来回忆以下C 语言的强制类型转换形式 (type) expr;这种旧式强制类型转换从表现形式上来说不够清晰明了容易看漏一旦转换过程出现问题追踪起来也就更加困难。为了解决以上问题C不仅兼容了C的强制转换来引入了新的转换方法。强制类型转换的形式cast-nametype(exper);其中type是转换的目标类型exper是要转换的值cast-name 有以下四种static_castdynamic_castconst_castreinterpret_cast接下来我们逐个进行分析。1、static_cast这里先介绍下顶层const和底层const的概念(1)顶层const表示指针本身是常量例如int *const p1 i;p1 j; //编译报错不能修改p1指向(*p1); //可以可以修改p1所指向的值的内容(2)底层const表示指针所指的对象是一个常量例如const int *p2 i;p2 j; //可以可以修改p2的指向(*p2); //编译报错不能修改p2所指向的值的内容那么再来说说static_cast任何具有明确定义的类型转换除了不包含底层const都可以使用 static_cast。例如double d 0.1;void* p d; double *dp static_castdouble*(p);static_cast本质上是传统c语言强制转换的替代品。通常该操作符用于非多态类型的转换任何标准转换都可以使用它。2、dynamic_cast用于将基类指针或引用安全的转换成派生类的指针或引用(运行时类型识别)。dynamic_cast运算符的使用形式如下dynamic_cast(e)dynamic_cast(e)dynamic_cast(e)其中type必须是一个类类型并且通常情况下该类型应该含有虚函数在第一种形式中e必须是有效指针在第二种形式中e必须是一个左值在第三种形式中e不能是左值。如果转换目标是指针并且转换失败则结果是0如果转换目标是引用并且转换失败的则会抛出异常。因此dynamic_cast操作符一次执行两个操作。首先验证被请求的转换是否有效只有转换有效操作符才实际进行转换。3、const_cast只能用于改变运算对象的底层const(去掉const属性)例const char *p1;char* p2 const_castchar*(p1);注意我们去掉了const属性编译器不会再阻止我们对该对象进行写操作但要注意通过p2写值是未定义行为。4、reinterpret_cast该操作符用于将一种类型转换为另一种不同的类型比如可以把一个指针类型转换为一个整数再把整数转换为指针类型并且还是原来那个指针。“通常为运算对象的位模式提供较低层次上的重新解释“即是将变量以二进制形式被重新解释为新的类型这个操作本质是依赖于机器的也就是说还需要考虑移植性。要想安全的使用reinterpret_cast必须对涉及的类型和编译器实现转换的过程都非常了解。reinterpret_casts 的最普通的用途就是在函数指针类型之间进行转换。简单总结基本类型(非多态)的转换用static_cast。多态类之间的类型转换用dynamic_cast。去掉const属性用const_cast。不同类型的指针类型转换用reinterpreter_cast。(慎用)- EOF -推荐阅读 点击标题可跳转1、C 初始化的坑你也遇到过吗?2、NVIDIA 开源 C 标准库 Libcu3、TIOBE 9月编程语言排行榜发布C增速最快C20 的功劳看完本文有帮助请分享给更多人关注「CPP开发者」加星标提升C/C技能点赞和在看就是最大的支持❤️