当前位置: 首页 > news >正文

安徽省住房城乡建设厅网站青岛网站建设企业

安徽省住房城乡建设厅网站,青岛网站建设企业,艺术字体在线生成器下载,三亚手机台app笔者最近在找工作时,无意间读到了一本名为《剑指offer》的书,粗略翻阅了一下,感觉这将会是一本能让我不再苦恼于笔试和面试“手搓代码”的书。故笔者写下该系列博客记录自己的学习历程,希望能和这本书的读者朋友们一起交流学习心得…

笔者最近在找工作时,无意间读到了一本名为《剑指offer》的书,粗略翻阅了一下,感觉这将会是一本能让我不再苦恼于笔试和面试“手搓代码”的书。故笔者写下该系列博客记录自己的学习历程,希望能和这本书的读者朋友们一起交流学习心得。
介绍:《剑指Offer:名企面试官精讲典型编程题(第2版)》剖析了80个典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。
编程题链接:牛客网在线编程_算法面试_面试必刷TOP101 (nowcoder.com)
本博客关键词:类型转换关键字

类型转换关键字

先理解两个概念:

  • 上行转换:将派生类的指针或引用转换为其基类的指针或引用。这种转换是安全的
  • 下行转换:将基类的指针或引用转换为派生类的指针或引用。这种转换可能不安全
    C++中的类型转换关键字有4种:static_cast dynamic_cast const_cast reinterpret_cast,调用的统一格式为:cast-name < type > (expression);,其中cast-name是转换方式关键字,type是转换的目标类型,expression是被转换的值。

static_cast

  1. static_cast关键字是在编译阶段运行的,不提供动态的检查,所以在编程时就需要确保转换的安全性。
  2. 在类层次结构中转换,假如有父类Dad和子类Son,父类有一个virtual void speak()方法,子类有一个void speak()方法。Dad *dadPtr = new Son()就属于上行转换,这种转换是安全的,如果此时dadPtr->speak();输出仍为子类对应的speak()方法的内容。
  3. Son *sonPrt = new Dad(33, 174);这种属于下行转换,是不安全的,而且在GCC中,这个语句编译器是会报错的,会显示"Dad *" 类型的值不能用于初始化 "Son *" 类型的实体。这是就需要通过static_cast来进行下行转换:Son *sonPrt = static_cast<Son*>(new Dad(33, 174));,这样就能成功实现类型转换,但依然是不安全的。此时调用sonPrt->speak();输出的是父类的speak()的内容。
  4. static_cast也常用于基本数据类型之间的转换,如double a = static_cast<double>(1) / 3;输出为对应的浮点数0.333333,如果不加类型转换,输出为0。
  5. 也可以实现把void指针转换成目标类型的指针(这是极不安全的);

dynamic_cast

  1. dynamic_cast会在运行时检查类型转换是否合法,具有较高的安全性,对于上行转换,dynamic_cast的效果和static_cast的效果基本一致,但是对于下行转换,dynamic_cast会检查转换类型,相比static_cast更安全。
  2. 代码Son *sonPrt = dynamic_cast<Son *>(new Dad(33, 174));编译时不会报错,但是运行时会产生段错误。
  3. dynamic_cast转换仅适用于指针或引用。
  4. void *类型转换:使用dynamic_cast时,必须确保指针指向一个完整类类型,然后才能进行void *的转换
class A{virtual void f(){}};
int main()
{A *pA = new A;void *pV = dynamic_cast<void*>(pA);
}

const_cast

  1. const_cast的作用是移除或添加constvolatile属性。它是唯一可以用于修改constvolatile修饰符的类型转换运算符。
  2. 移除const属性举例:
 const int a = 10;
int *pc = const_cast<int *>(&a);
// int *pc = &a // 报错
*pc = 12;
cout << *pc << endl; // 输出为12,a地址对应的值被修改
  1. 添加const属性举例:
int a = 10;
const int *pc = const_cast<const int *>(&a);
// *pc = 12;  // 报错,因为pc对应的值是const类型,只读
cout << *pc << endl; // 输出为10

reinterpret_cast

非常激进的指针类型转换,在编译期完成,可以转换任何类型的指针,安全性非常低,一般不建议使用。

http://www.yayakq.cn/news/312878/

相关文章:

  • 企业网站怎么制作流程成都广告公司联系方式电话
  • 下载代码的网站网站优化哪家最专业
  • 公司网站制作设电子商务类网站有哪些
  • 故城县网站建设服务企业宣传片制作拍摄
  • 网站建设合同义务平面设计培训学校排名
  • 怎么把源码做网站wordpress知更鸟 破解
  • 自己什么建设网站苏州做网站优化哪家好
  • 团购网站单页模板朔州网站建设收费
  • 开发网站和app手机网站效果图做多大的
  • 崇明建设镇乡镇府网站wordpress手机菜单分行
  • 做甜品台的网站网站搭建免费视频教程
  • 蒙晟建设有限公司官方网站官网模板建站塔山双喜
  • 湟源县wap网站建设公司mvc做网站前台代码
  • 网站seo快速wordpress 分享
  • 上饶网站建设哪家好泰安中商网络做的网站怎么进入
  • 滨州正规网站建设价格成都企业网站建设方案
  • 高端网站开发教程知名做网站
  • 网站制作好如何上线接单网官网
  • 技术支持:淄博网站建设本地高端网站建设信息大全
  • 怎么做盗版电影网站网站开发的现状
  • cn结尾的网站 做外贸做电影网站有什么好处和坏处
  • 甘肃省广电网络公司网站wordpress列表加载更多
  • 莱芜网站建设排行杭州酒店网站建设
  • 域名申请而完成以后怎么做网站怎样免费建立个人网站
  • 网站页面制作视频网站建设所需人力
  • 西部数码网站管理助手 提权梨树县住房和城乡建设局网站
  • 菏泽定制网站建设推广百度关键词屏蔽
  • 湘潭做网站优化深圳网站建设 推广
  • 邢台做网站推广的公司汕头网络推广推荐
  • 基础的网站建设网站找谁做