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

海岸城网站建设做乡村旅游的网站

海岸城网站建设,做乡村旅游的网站,网站建设流程有,北京到安阳的高铁目录 前言一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast3.5 RTTI 前言 本篇文章讲解的是C中对于C语言类型转换做出的一些更好的规范问题#xff0c;同时也保证了在一些特殊场景下进… 目录 前言一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast3.5 RTTI 前言 本篇文章讲解的是C中对于C语言类型转换做出的一些更好的规范问题同时也保证了在一些特殊场景下进行类型转换的安全问题下面就让我们一起来学习吧 一、C语言中的类型转换 在C语言中如果赋值运算符左右两侧类型不同或者形参与实参类型不匹配或者返回值类型与接收返回值类型不一致时就需要发生类型转化C语言中总共有两种形式的类型转换隐式类型转换和显式类型转换。 隐式类型转化编译器在编译阶段自动进行能转就转不能转就编译失败。显式类型转化需要用户自己处理。隐式类型转化是针对意义相近的类型而显示的强制类型转换是针对意义不相近的类型值转换后需要有意义。 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需要四种类型转换 C 语言的转换格式很简单但是有不少缺点的1. 隐式类型转化有些情况下可能会出问题比如数据精度丢失。2. 显式类型转换将所有情况混合在一起代码不够清晰。 因此 C 提出了自己的类型转化风格注意因为 C 要兼容 C 语言所以 C 中还可以使用 C 语言的转化风格。 三、C强制类型转换 C 为了加强类型转换的可视性引入了四种命名的强制类型转换操作符static_cast、reinterpret_cast、const_cast 和 dynamic_cast。 3.1 static_cast static_cast 用于非多态类型的转换静态转换编译器隐式执行的任何类型转换都可用 static_cast但它不能用于两个不相关的类型进行转换。 int main() {double d 12.34;int a static_castint(d); // 相近类型之间的转换cout a endl;int* p a;//int address static_castint(p); // static_cast不能用于意义不相近的类型return 0; }3.2 reinterpret_cast reinterpret_cast 操作符通常为操作数的位模式提供较低层次的重新解释用于将一种类型转换为另一种不同的类型。 int main() {double d 12.34;int a static_castint(d);cout a endl;// 这里使用static_cast会报错应该使用reinterpret_cast//int *p static_castint*(a);int* p reinterpret_castint*(a);return 0; }3.3 const_cast const_cast 最常用的用途就是删除变量的 const 属性方便赋值其对应的是 C 语言的强制类型转换。 int main() {const int a 2;//int* p reinterpret_castint*(a); // 编译报错int* p const_castint*(a);*p 3;cout a endl; // 2cout *p endl; // 3cout a endl;cout p endl;return 0; }为什么上图的地址一样数据却不一样呢这是由于const 修饰的变量编译器认为其不会被修改为了提高效率将其加载到寄存器中所以第一个打印的 2 是在寄存器中取的而第二个打印的 3 是在去内存中取的。 如果我们想要编译器不进行优化而是每次取数据都去内存中取的话此时可以加上volatile关键字修饰const 变量 a这样它就不会被加载到寄存器中了。 3.4 dynamic_cast dynamic_cast 用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换)。 向上转化子类对象指针 / 引用转换成父类指针 / 引用不需要转换赋值兼容规则。 向下转型父类对象指针 / 引用转换成子类指针 / 引用需要使用 dynamic_castdynamic_cast 转换是安全的。(注对象是不能转换的父类对象转子类对象就拥有了子类对象的属性了绝对不能的) 注意 1. dynamic_cast 只能用于父类含有虚函数的类(本身设计出来就是为了处理多态场景中的类型转换问题)。 2. dynamic_cast 会先检查是否能转换成功能成功转换则返回正确的地址不能则返回 nullptr。 我们先来分析一下这段程序 class A { public:virtual void f() {}int _a 0; };class B : public A { public:int _b 1; };void fun(A* pa) {B* pb1 (B*)pa;cout pb1: pb1 endl;pb1-_a;pb1-_b;cout pb1-_a : pb1-_b endl; }int main() {A a;B b;fun(a);fun(b);return 0; }为何当父类指针指向父类对象时强转为指向子类对象访问子类对象的成员会崩溃呢 所以为了避免这种情况的发生我们设计出了dynamic_cast来解决这个问题 强制类型转换关闭或挂起了正常的类型检查每次使用强制类型转换前应该仔细考虑是否还有其他不同的方法达到同一目的如果非强制类型转换不可则应限制强制转换值的作用域以减少发生错误的机会。强烈建议避免使用强制类型转换。 3.5 RTTI RTTIRun-time Type identification的简称即运行时类型识别。 C通过以下方式来支持RTTI typeid运算符(可以拿到变量对应类型的字符串) dynamic_cast运算符(可以识别父类的指针是指向父类对象还是子类对象) decltype(可以推导一个对象的类型并用该类型来定义对象。)
http://www.hkea.cn/news/14543463/

相关文章:

  • 门户类网站是什么意思网站制作要学哪些
  • 关于网站seo优化wordpress安装网址
  • 网站怎么做聚合页面安装wordpress错误
  • 网站建设群标签好写什么wordpress mu 最新版
  • 餐饮网站建设方案网站建设常用六大布局
  • 上海企业免费建站成都网站开发公司有哪些
  • 网站开发讲座如何注册企业邮箱?
  • 宜宾市网站建设松江网站开发培训学校
  • 用asp.net做电商网站网页版梦幻西游兑换码最新
  • 苏州市网站制作服务专业的网站建站公司
  • 辽宁建设工程信息网官网新网站入口有网址如何做网站赚钱
  • 在源码之家下载的网站模板可以作为自己的网站吗有没有帮人做数学题的网站
  • 淘宝联盟怎么做网站推广化妆品网站设计报告
  • 深圳做网站推广公司专业APP客户端做网站
  • 常州做沙滩旗的公司网站齐鲁人才招聘网
  • 网站建设佰金手指科杰二五关于西安网页设计
  • 众筹网站建设报价绵阳做网站的
  • 全网营销网站怎么做用手机做免费自助网站
  • 台州网站优化方案中国建行官网首页
  • 跨境电商 网站开发seo优化一般包括哪些内容()
  • 常平做网站公司简介50字
  • 广西城乡建设网站换友网站
  • 网站分为那几个模块电子商务网站建设人才调研
  • 网站程可以自己做吗建站开始的前6个月多少外链最合适
  • 渭南做网站电话长沙seo步骤
  • 电子商务网站的规划与分析WordPress的博客添加按钮
  • 农业网站 源码中国免费素材网站
  • 中山网站制作建设做ppt常用图片网站有哪些
  • 做调查问卷能挣钱的网站logo免费一键生成
  • 连云港市建设工程安全监督站网站wordpress插件wp