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

阿里云一键建站网站中国太空空间站

阿里云一键建站网站,中国太空空间站,中山专业找人公司,wordpress二维码插件付费C语言中的类型转换 在C语言中#xff0c;如果赋值运算符左右两侧类型不同#xff0c;或者形参与实参类型不匹配#xff0c;或者返回值类型与 接收返回值类型不一致时#xff0c;就需要发生类型转化#xff0c;C语言中总共有两种形式的类型转换#xff1a;隐式类型 转换和…C语言中的类型转换 在C语言中如果赋值运算符左右两侧类型不同或者形参与实参类型不匹配或者返回值类型与 接收返回值类型不一致时就需要发生类型转化C语言中总共有两种形式的类型转换隐式类型 转换和显式类型转换。 1. 隐式类型转化编译器在编译阶段自动进行能转就转不能转就编译失败 2. 显式类型转化需要用户自己处理 void Test () {int i 1;//隐式类型转换double d i;printf(%d, %.2f\n , i, d);int* p i;//显示的强制类型转换int address (int) p;printf(%x, %d\n , p, address); } 缺陷 转换的可视性比较差所有的转换形式都是以一种相同形式书写难以跟踪错误的转换 C语言中的类型转换还是有很多坑的强制类型转换还好起码能看到转的是什么类型但是隐式类型转换出的问题就很多了比如高精度转低精度类型精度缺失int转unsigned int可能导致死循环等等为此C引入了四种命名的强制类型转换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast C四种命名的强制类型转换操作符 1.static_cast static_cast用于非多态类型的转换静态转换编译器隐式执行的任何类型转换都可用 static_cast但它不能用于两个不相关的类型进行转换 int main() {double d 1.53;int x static_castdouble(d);//意义相近用static_castint y d;cout x endl;cout y endl;//int z 2;//int* p static_castint*(z);//报错return 0; } 2.reinterpret_cast reinterpret_cast操作符通常为操作数的位模式提供较低层次的重新解释用于将一种类型转换 为另一种不同的类型 int main() {int z 2;int* p reinterpret_castint*(z);return 0; } 3.const_cast const_cast最常用的用途就是删除变量的const属性方便赋值const_cast中的类型必须是指针/引用 void test() {const int a 2;int* p const_castint*(a);*p 3;cout a endl;cout *p endl;cout a endl;cout p endl; } 为什么*p和a的值不同这其实和编译器优化有关系因为a是const类型不可更改所以a被保存在寄存器中当程序需要使用a时直接拿寄存中的a而不是找内存中的a实际a的值已经被改变成了3可以用volatile关键字让它每次都去内存中找a void test() {volatile const int a 2;int* p const_castint*(a);*p 3;cout a endl;cout *p endl;cout (void*) a endl;//cout typeid(a).name() endl; //a的类型(int const volatile*)会被识别成bool类型打印所以需要强转成指针类型打印地址cout p endl; } 4.dynamic_cast dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换) 向上转型子类对象指针/引用-父类指针/引用(不需要转换赋值兼容规则) 向下转型父类对象指针/引用-子类指针/引用(用dynamic_cast转型是安全的) 注意 1. dynamic_cast只能用于父类含有虚函数的类 2. dynamic_cast会先检查是否能转换成功能成功则转换不能则返回0 class A { public:virtual void f() {} };class B : public A {};void fun(A* pa) {// dynamic_cast会先检查是否能转换成功能成功则转换不能则返回B* pb1 static_castB*(pa);B* pb2 dynamic_castB*(pa);cout pb1: pb1 endl;cout pb2: pb2 endl; }int main() {A a;B b;fun(a);fun(b);return 0; } 注意 强制类型转换关闭或挂起了正常的类型检查每次使用强制类型转换前程序员应该仔细考虑是否还有其他不同的方法达到同一目的如果非强制类型转换不可则应限制强制转换值的作用域以减少发生错误的机会。强烈建议避免使用强制类型转换 这里解释一下为什么dynamic_cast需要父类有虚函数当使用 dynamic_cast 进行向下转型时它会在运行时检查给定对象的类型信息并验证是否可以进行转换。如果基类没有虚函数那么无法通过动态绑定确定对象的真实类型从而也无法确保类型转换的安全性 RTTI了解Run-time Type identification的简称即运行时类型识别。 C通过以下方式来支持RTTI         1. typeid运算符         2. dynamic_cast运算符         3. decltype
http://www.zqtcl.cn/news/184906/

相关文章:

  • 邢台建设银行官方网站为什么建设网站很多公司没有
  • 闵行做网站费用湖南正规网络营销哪家便宜
  • 找个公司做网站需要注意什么wordpress用户名长度
  • 推荐几个没封的正能量网站营销技巧和营销方法视频
  • html mip 网站桂林市临桂区
  • 做网站如何月入10万建行app怎么注册登录
  • 建设一个旅游网站毕业设计建设网站的功能定位是什么原因
  • wordpress网站导航模板杭州建设网站的公司
  • 如何做视频解析网站wordpress 关闭评论
  • 安福网站建设微信开发者工具怎么下载
  • 网罗设计网站威海网页设计制作公司
  • 网站用cmswordpress插件怎么做
  • 如何办好公司网站元器件网站搭建
  • 建设领域行政处罚查询网站wordpress数据库发文章
  • 怎么做网页的多开器宿迁seo优化
  • 别人帮做的网站怎么修改病句店铺引流的30种方法
  • 网站备案幕布怎么申请绍兴cms建站模板
  • 做网站熊掌号软件设计公司排名
  • 深圳 做网站学做西点的网站
  • 静态网站安全性百度服务平台
  • 网站vi设计公司网站建设app
  • 书店网站建设策划书总结每天看七个广告赚40元的app
  • 做网站的属于什么专业成都广告制作安装公司
  • 天津市网站建设公司网站制作费用
  • 网站制作公司 郑州wordpress图片中文不显示解决
  • 网站建设模式有哪些方面jquery做的装修网站
  • 佛山手机建网站企业网站公司单位有哪些
  • 给企业做网站的平台有没有专门做衣服搭配的网站
  • 青岛本地网站最近军事新闻大事
  • 潍坊哪里有做360网站的成都官微最新发布