C/C++的类型安全

来源:互联网 发布:淘宝上买卫生巾靠谱吗 编辑:程序博客网 时间:2024/05/18 19:36

类型安全的代码不会视图访问没被授权的内存区域。类型安全的编程语言指的是其提供保障类型安全的机制;类型安全的程序指的是该程序没有隐含类型错误。

1、C语言的类型安全

C语言只在局部上下文中表现类型安全,例如试图将一种类型的指针转换成其他类型的指针时,编译器会报错,除非使用显示类型转换。

例1、printf输出格式

void main(){

printf("%d\n", 10);//程序输出:10

}

void main(){

printf("%f\n", 10);//程序输出:0.000000

}

void main(){

printf("%s\n", 10);//编译通过,执行时报错Access Violation

}

例2、malloc函数的返回值

malloc函数的返回值是void *类型,通常需要相应的显示类型转换。但是如果出现int * p = (int *)malloc(20*sizeof(char))可能会带来一些问题,但是此时C语言没有报错。


2、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涉及更多具体的类型检查。

但是C++中仍然无法保证绝对的类型安全:

例1、空类型指针void *

int main(){

      int x = 1;

      void *p = &x;

      double d = (*(double *)p);

      cout << d << endl;

      return 0;

}//程序输出结果并不是1



0 0