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

网站备案信息注销php网站开发实例代码

网站备案信息注销,php网站开发实例代码,建设彩票网站需要哪些要求,深圳做网站排名哪家好C风格类型转换的危险 Joshua Gerrard 的文章讨论了 C风格类型转换(C-style cast)的危险性,并通过几个示例来演示它的潜在问题。C风格转换有时候会让程序看起来没有错误,但实际上可能会引入潜在的类型不匹配问题,这些问…

C风格类型转换的危险

Joshua Gerrard 的文章讨论了 C风格类型转换(C-style cast)的危险性,并通过几个示例来演示它的潜在问题。C风格转换有时候会让程序看起来没有错误,但实际上可能会引入潜在的类型不匹配问题,这些问题可能在编译时没有警告,也可能在运行时导致错误。以下是对文章的中文理解:

示例 1:
float x = 1.0f;
double* y = (double*) &x;

你认为这段代码能通过编译吗?

  • GCC 5.2.0 和 MSVC 19 甚至不会发出警告。C风格转换 (double*) 会让编译器接受将 float* 强制转换为 double*,但是这种转换是非法的,因为 floatdouble 类型在内存布局上是不同的。
    • 问题: 即使没有警告,它仍然是不安全的,因为这样做会破坏类型系统,可能导致不可预期的行为。
      改成 static_cast 之后:
float x = 1.0f;
double* y = static_cast<double*>(&x);

你认为这会编译通过吗?

  • GCC 5.2.0 会报错:invalid static_cast from type 'float*' to type 'double*'
  • MSVC 19 会报错:C2440 'static_cast': cannot convert from 'float *' to 'double *'
    分析:
  • static_cast 是类型转换的一个更安全的版本。它在编译时会进行类型检查,如果转换无效,则会发出错误。而 C风格转换则没有这种检查,可能导致程序在运行时出现潜在的类型问题。
示例 2:
struct T;
const float x = 1.0f;
T* y = (T*) &x;

你认为这段代码能通过编译吗?

  • GCC 5.2.0 和 MSVC 19 不会发出任何警告,直接编译通过。但它实际上是错误的。
    改成 static_cast 之后:
T* y = static_cast<T*>(&x);

你认为这会编译通过吗?

  • GCC 5.2.0 会报错:invalid static_cast from type 'const float*' to type 'T*'
  • MSVC 19 会报错:C2440: 'static_cast': cannot convert from 'const float *' to 'T *'
    分析:
  • static_cast 在这里无法进行类型转换,因为 x 是一个 const 类型的对象,而 T* 是一个非 const 类型的指针。static_cast 不能在这种情况下去除 const 限定符。
  • C风格转换 不会做这种检查,它会将 const 移除,这会导致潜在的未定义行为。
发生了什么?

在 C++ 中,C风格转换是 “隐式的多重类型转换”。根据 N4296 - 5.4 Explicit type conversion 规范,C风格转换会尝试以下几个步骤,直到有一个成功:

  1. const_cast:移除或添加 const 限定符。
  2. static_cast:执行类型之间的转换(如从基类到派生类)。
  3. reinterpret_cast:执行不同类型之间的转换(通常用于低级内存操作)。
  4. reinterpret_cast + const_cast:同时进行 reinterpret_castconst_cast
    问题:
    C风格转换会进行多个步骤的类型转换,而且不会检查是否符合类型系统的规则,这就导致了它的危险性。对于复杂的类型转换,C风格转换会绕过编译器的类型检查,从而可能导致程序出现难以发现的错误。
为什么 static_cast 会出问题?

static_cast 是一种安全的类型转换方式,它会进行编译时检查。对于不合法的类型转换,它会直接报错,避免出现运行时错误。

  • 比如,在上面的例子中,static_cast 不会允许将 const float* 转换为 T*,因为这违反了 C++ 的类型系统。
  • static_cast 可以在一些合法的情况下进行转换,例如从基类指针转换为派生类指针,但必须保证转换是合法的、符合类型层次结构的。
总结

C风格类型转换非常灵活,但也非常危险。它不会进行类型检查,可能导致未定义的行为。使用 static_castdynamic_castconst_castreinterpret_cast 等现代 C++ 类型转换工具,能够帮助我们更加安全地进行类型转换,确保类型匹配,并且提高代码的可读性和可维护性。
总之,建议尽量避免使用 C风格的类型转换,转而使用 C++ 提供的类型转换方式,避免潜在的风险。


文章转载自:

http://GSuQGcaB.sgfnx.cn
http://sxE12Zhe.sgfnx.cn
http://Z3NucciA.sgfnx.cn
http://BIgTsyMq.sgfnx.cn
http://xuyh4XBP.sgfnx.cn
http://e8v1Xqll.sgfnx.cn
http://2emUNTqo.sgfnx.cn
http://0FQ51JqG.sgfnx.cn
http://77GXgEVL.sgfnx.cn
http://sXVshLvs.sgfnx.cn
http://znqPGcGw.sgfnx.cn
http://zWp8ds3w.sgfnx.cn
http://ydR8RIXP.sgfnx.cn
http://A9LHnSyG.sgfnx.cn
http://Xn64Sg3q.sgfnx.cn
http://DT93KkVg.sgfnx.cn
http://pkD4EZ6e.sgfnx.cn
http://p0ojFAOx.sgfnx.cn
http://CgPJYUIn.sgfnx.cn
http://y7sPAwFo.sgfnx.cn
http://4zLFoM2V.sgfnx.cn
http://feSTxVSQ.sgfnx.cn
http://RLtl5zHl.sgfnx.cn
http://3aJpg4xj.sgfnx.cn
http://hpSCzvPp.sgfnx.cn
http://KCPRUxAX.sgfnx.cn
http://tRb4MY5H.sgfnx.cn
http://Pt2VeV3u.sgfnx.cn
http://d2qh1vsw.sgfnx.cn
http://Y0ubK21X.sgfnx.cn
http://www.dtcms.com/wzjs/742656.html

相关文章:

  • 可信赖的商城网站建设移动应用网站开发阶段作业
  • 北京的网站建设都有什么推广平台
  • 做儿童方面的网站网站开发买什么书
  • 贵州省住房和城乡建设厅官方网站我做的电影网站为什么百度搜索不到
  • 免费优化网站建设搜索引擎seo如何赚钱
  • 有什么网站可以做跳转连接的南宁百姓网
  • wp网站打开太慢怎么做优化鼎湖网站建设公司
  • 共享办公室 设计搜索优化的培训免费咨询
  • 浦东新区建设工程安全质量监督站网站网站与微信对接
  • 购物网站html网站建设的基本技术
  • 网站整站下载器下载utf8网页乱码用excel可以做网站
  • 建站推荐网站健康东莞app
  • 建设投资公司网站做网站广告多少钱
  • 临淄区建设局网站北京招标代理公司排名
  • 财政局门户网站建设方案不用下载直接进入的app
  • 网站二次开发公司自建网站怎么关闭
  • 昆明网站建设解决方案如何在网站上推广自己的产品
  • 网站程序调试模式怎么做三秦网
  • 网上开店的货源渠道有哪些seo排名查询软件
  • 电子商务网站与建设实践报告广州致峰网站建设
  • 个人站长网站河北邯郸ktv
  • 免费网站去哪找做网站要收订金吗
  • 东莞技术好的网站建设推广重庆市建设执业注册中心网站
  • 浪漫网站建设制作表情包的软件
  • 餐饮网站建设网站桐乡市城市规划建设局网站
  • 专业的做网站公司郑州网站制作生产厂商定制
  • python做网站步骤网站建设专业的
  • 美食网站建设需求中国国防建设网站
  • 做水印的网站建行个人手机银行app下载
  • 网站未备案会怎么样成都百度推广优化