返回介绍

4.4 C++11:提高静态类型安全

发布于 2024-08-19 12:44:37 字数 1097 浏览 0 评论 0 收藏 0

依赖静态类型安全有两大好处:

  • 明确意图
    • 帮助程序员直接表达想法
    • 帮助编译器捕获更多错误
  • 帮助编译器生成更好的代码。

第二点是第一点的结果。受 Simula 的启发,我对 C++ 的目标是要提供一个灵活可扩展的静态类型系统。目的不仅是类型安全,还要能够直接表达细粒度的区别,例如物理单位检查(§4.2.7)。一段只用了内建类型如整型和浮点型写成的程序,也算是类型安全但却没有由此带来特别的安全优势。那样的代码没有直接表达应用中的概念。特别需要指出,int 或者 string 几乎可以表达任何东西,所以传递这样的值就完全没有给出被传递值的任何语义信息。

C++11 中与类型安全直接相关的改进有:

  • 对于线程和锁的类型安全接口——避免 POSIX 和 Windows 在并发代码中对 void** 及宏的依赖(§4.1.2)
  • 范围 for——避免错误地指定范围(§4.2.2)
  • 移动语义——解决指针的过度使用问题(§4.2.3)
  • 资源管理指针(unique_ptrshared_ptr(§4.2.4))
  • 统一初始化——让初始化更通用,更一致,更安全(§4.2.5)
  • constexpr——消除多处(无类型和无作用域的)宏的使用(§4.2.7)
  • 用户定义的字面量——让用户定义类型更像内建类型(§4.2.8)
  • enum class——消除一些涉及整型常量的弱类型做法
  • std::array——避免内建数组不安全地退化成指针

委员会一直收到建议,应当通过禁止不安全特性(例如,废弃像内建数组和类型转换这样的 C 风格特性)来改善类型安全。然而,移除特性(取缔它们)的尝试一再失败,因为用户无视移除的警告并坚持要求实现的提供者继续支持这些特性。一个更可行的方式似乎是给用户提供使用指南和实施指南的手段,同时保持标准本身继续和先前的版本兼容(§10.6)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文