C++类型安全

C++类型安全目录

  • 1、什么是类型安全
  • 2、C的类型安全
  • 3、C++的类型安全
  • 4、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,保留了一些非类型安全的特性,如直接指针操作等。

你可能感兴趣的:(C++面经,c++,安全,java)