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

珠海舒讯网站建设能力天空的网站建设优劣势

珠海舒讯网站建设,能力天空的网站建设优劣势,图片怎么上传到wordpress,中国宣布进入战时状态会怎样前言 我们都知道C是兼容C语言的在C语言中存在两种方式的类型转换#xff0c;分别是隐式类型转换和显示类型转换#xff08;强制类型转换#xff09;#xff0c;但是C觉得C语言的这套东西是够好#xff0c;所以在兼容C语言的基础上又搞了一套自己的关于类型转换的东西。 目…前言 我们都知道C是兼容C语言的在C语言中存在两种方式的类型转换分别是隐式类型转换和显示类型转换强制类型转换但是C觉得C语言的这套东西是够好所以在兼容C语言的基础上又搞了一套自己的关于类型转换的东西。 目录 1.C语言中的类型转换 2.C中的类型转换 3.1static_cast 3.2reintrepret_cast 3.3const_cast 3.4dynamic_cast  3.RTTI 1.C语言中的类型转换 在C语言中如果赋值运算符的左右两侧值的类型不同或者形参与实参的类型不匹配或者返回值类型与接受返回值类型不匹配就会发生类型转换 C语言中存在两种方式的类型转换分别是隐式类型转换和显示类型转换强制类型转换。 1.隐式类型转换编译器在编译的阶段自己进行能转就转不能转就会报错编译失败。一般用于相近的类型 2.显示类型转换需要用户自己处理。 void Test1() {int a 10;double b 2.2;//隐式类型转换a b;cout a;//显示类型转换--强制类型转换int* p (int*)a;cout p endl; } 缺点比较暴力可视性不够好所有的转换都是以一种形式书写的难以跟踪错误的转换。  2.C中的类型转换 所以C在兼容C语言的基础之上搞出来了自己的一套东西来对C语言做的不好的地方进行优化但是这里只是建议使用C自己的类型转换方式还是兼容C语言的方式的。 标准的C引入了四种命名的强制类型转换符 static_cast,reinterpret_cast,const_cast,dynamic_cast. 3.1static_cast statci_cast用于非多态的类型转换和C语言中的隐式类型转换一样。不能用于两个不相关的类型之间的转换。 void Test2() {int a 10;double b 2.3;a static_castint(b);//和C语言中的隐式类型转换一致cout a; } 3.2reintrepret_cast reinterpret_cast用于两个不想关的类型之间的强制类型转换与C语言中的强制类型转换大部分是一致的。除了const类型等的转换 void Test3() {int a 9;double* p nullptr;p reinterpret_castdouble*(a);cout p endl; } 3.3const_cast const_cast最常用的方式就是删除变量的const属性方便赋值。  void Test4() {const int c 90;int* p const_castint*(c);cout *p endl; } 这里有一个有意思的问题我们可以一起来看看。 如果将*p的值改了c的值会变吗 void Test4() {const int c 90;int* p const_castint*(c);cout *p endl;//如果将*p改为10c的值会变吗(*p) 20;cout *p *p endl;coutc c endl; } 结果是不会改变的为什么呢 因为在变量c是const修饰的所以理论上是不会改变的所以编译器会对变量c进行处理将变量c的值存储在寄存器中虽然*p 20,确实改变了 变量c的值但是程序在执行的时候并没有去内存中拿C的值而是去寄存器中拿c的值所以就会看到这样的结果实际上是编译器的优化导致的。 怎么解决这个问题呢需要对变量加关键字volatile。 void Test4() {// const int c 90;volatile const int c 90;int* p const_castint*(c);cout c c endl;//如果将*p改为10c的值会变吗(*p) 20;cout *p *p endl;coutc c endl; } 加上volatile后程序会去内存中取这个变量的值。  3.4dynamic_cast  dynamic_cast用于将一个父类的指针/引用转换为子类对象的指针或者引用动态转换 向上转型子类对象的指针/引用给父类对象的指针/引用的过程不需要转换赋值兼容规则也就是我们常说的切片。 向下转型父类对象的指针/引用给子类对象的指针/引用的过程(用dynamic_cast进行类型转换是安全的) 。 注意 1.dynamic_cast只能用于父类是多态类的情况也就是父类必须有虚函数。 2.dynamic_cast会先检查转换是否成功如果成功则转换失败则返回0。 class A { public:virtual void func(){}int _a 10; }; class B :public A { public:int _b 20; }; void Fun(A a) {B *b (B*)a;cout b-_a endl b-_b endl; } int main() {A a1;B b1;Fun(a1);//如果没有采用dynamic_cast进行动态类型转化这里就会报错cout打印的是随机值因为这块空间是不允许被访问的//Fun(b1);return 0; } 如果没有采用dynamic_cast进行动态类型转化这里就会报错cout打印的是随机值因为这块空间是不允许被访问的。 class A { public:virtual void func(){}int _a 10; }; class B :public A { public:int _b 20; }; void FunDynamic(A a) {B* pb dynamic_castB*(a);if (pb)//通过返回值进行判断{cout pb-_a endl pb-_b endl;}else{cout 类型转换失败! endl;} } int main() {A a1;B b1;FunDynamic(a1);FunDynamic(b1);return 0; } dynamic_cast的原理 为什么dynamic只能用于父类是多态类的情况呢这就和dynamic的实现原理有关系了在虚表上方中有一个位置是专门表示类的类别的dynamic_cast就是专门去这块空间中取数据判断类的类别从而区分到底是父类对象还是子类对象如果是父类对象就会返回0。 这就是为什么要是父类是多态类的原因。 3.RTTI RTTIRun-time Type identification的简称 即运行时类型识别。 C通过一下方式来支持RTTI 1.typeid运算符 2.dynamic_cast 3.decltype
http://www.w-s-a.com/news/903164/

相关文章:

  • 兴安盟住房和城乡建设部网站在国外做网站
  • 南雄市建设局网站搜索关键词的方法
  • 网站建设维护工作经验深圳定制展会
  • 新闻类网站备案WordPress评论昵称显示错误
  • 如何建立一个个人网站自己做一个购物网站
  • 吴忠网站建设公司中国建筑股份有限公司 官网
  • 深圳电商网站开发公司page list wordpress
  • 长安外贸网站建设顺德区网站设计建设企业
  • 临沂市建设局网站简介专业建设网站开发
  • 肇庆网站制作设计中国企业500强招聘
  • 苏州厂房装修宁波seo网络推广外包报价
  • 文山知名网站建设惠州哪家做网站好
  • 物流网站风格网站登录密码保存在哪里设置
  • 免费网站怎么建立icodepython基础教程
  • 无障碍网站建设方案wordpress 任务管理系统
  • iis5.1发布网站中小企业网络营销存在的问题研究论文
  • 阳泉软件定制网站建设网站可以做多语言的吗
  • 建设网站的目的及功能定位主要包括哪些内容百度关键词优化
  • 开一个小程序要多少钱宁波seo网络推广外包报价
  • 网站备案最新备案号电子商务网站建设的规章制度
  • wordpress制作单页网站导航页面鞍山信息港招聘信息
  • 屏蔽ip地址访问网站自己做衣服的网站
  • 网站建设 域名业务 邮箱哪里有网站建设中心
  • 免费网站赚钱重庆建设摩托车股份有限公司
  • 合肥水运建设工程监理网站自己买服务器能在wordpress建网站
  • wordpress积分商城主题整站seo排名要多少钱
  • 鲜花网站建设的利息分析网站设计与制作专业
  • 深圳网站建设排名做网站的公司高创
  • 杭州哪家做外贸网站全国物流网站有哪些平台
  • 企业网站建设个人博客鞍山晟宇网站建设