• C++类型安全


    1、什么是类型安全

    类型安全(Type Safety)是指语言在编译和运行时提供的保护机制,来避免出现非法的类型转换和操作
    类型安全的语言在编译期就可以发现大部分的类型错误,使得程序运行时不太可能出现非法的类型转换或者访问错误。这样可以提高代码质量,减少潜在的bug。

    2、C的类型安全

    C语言不是类型安全的语言,原因如下:

    1)很多情况下,会存在类型隐式转换,比如bool自动转成int类型;

    2)malloc函数返回的是void *的空类型指针,通常需要这样的显示类型转换char *pStr=(char*)malloc(100*sizeof(char)),类型匹配没有问题。但如果出现int * pInt=(int*)malloc(100*sizeof(char))这样的转换,可能会带来一些问题,但C并不会提示。

    当然,在有些情况下表现还是类型安全的,当从一个结构体指针转换成另一个结构体指针时,编译器会报错,除非显式转换

    3、C++的类型安全

    C++也不是类型安全的语言,但远比C更具类型安全。相比于C,提供了一些安全保障机制

    1. 操作符new返回的指针类型严格与对象匹配,而不是void*;
    2. C中很多以void*为参数的函数可以改写为C++模板函数,而模板是支持类型检查的;
    3. 引入const关键字代替#define constants,它是有类型、有作用域的,而#define constants只是简单的文本替换;
    4. 一些宏定义可被改写为inline函数,结合函数的重载,可在类型安全的前提下支持多种类型,当然改写为模板也能保证类型安全;
    5. C++提供了dynamic_cast关键字,使得转换过程更加安全,因为dynamic_cast比static_cast涉及更多具体的类型检查。

    4、C++ 的潜在类型问题

    1. 静态类型系统的局限
      C++采用静态类型检查,只能在编译期检查部分类型错误,一些运行时错误无法避免。
    2. 隐式类型转换风险
      如整数和浮点数之间的隐式转换就可能导致意外问题。
    3. 引用和指针的不当使用
      开发者的不当使用可能导致未定义行为。
    4. 旧式C语法
      C++为了兼容C,保留了一些非类型安全的特性,如直接指针操作等。
  • 相关阅读:
    RocketMQ的ACL需求背景及其设计
    深入学习 Redis Cluster - 集群是啥,数如何理解据分片算法
    Java的三种技术架构是什么?
    数字化转型系列主题:战略咨询常用术语解释和样例说明
    Android---自定义View
    域控主机 带瘤
    【前端设计模式】之解释器模式
    Matlab|【免费】基于半不变量的概率潮流计算
    MySQL主从复制
    “一带一路”十周年:用英语讲好中华传统故事
  • 原文地址:https://blog.csdn.net/qq_40685457/article/details/133690879