类型安全

1、什么是类型安全

  类型安全简单来说就是访问可以被授权访问的内存位置类型安全的代码不会试图访问自己未被授权的内存区域。一方面,类型安全被用来形容编程语言,主要根据这门编程语言是否提供类型安全的保障机制;另一方面,类型安全也可以用来形容程序,根据这个程序是否隐含类型错误。类型安全的语言和程序之前,其实没有必然的联系。类型安全的语言,使用不当,也可能写出来类型不安全的程序;类型不安全的语言,使用得当,也可以写出非常安全的程序。

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来申请内存,严格与对象类型匹配,而malloc是void *;

2)函数参数为void *的可以改写成模板,模板支持运行时检查参数类型

3)使用const代替define来定义常量,具有类型、作用域,而不是简单的文本替换;

4)使用inline代替define来定义函数,结合函数的重载,在类型安全的前提下可以支持多种类型,如果改写成模板,会更安全;

5)提供dynamic_cast使得转换过程更安全。

尽管如此,但如果使用空类型指针或者在两个不同类型指针间做强制转换,很可能引发类型不安全的问题。

 
原文地址:https://www.cnblogs.com/jiangyu0331/p/11714035.html