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
- C/C++的类型安全
- C/C++的类型安全
- C/C++的类型安全
- C/C++的类型安全
- C/C++的类型安全
- 【C/C++】什么是类型安全
- C/C++不是类型安全的!
- 类型安全的 C++/Lua 任意参数互调用
- 类型转换和类型安全(现代 C++)
- c的bool类型
- c 类型的声明
- C的“类型提升”
- C的“类型提升”
- 编写安全的C代码
- .NET(C#)中不同级别的安全透明代码对类型的影响
- [C#] as 和 is 运算符以及安全的类型强制转换
- [C#] as 和 is 运算符以及安全的类型强制转换
- 内存的存储类型(C/C++)
- malloc,ralloc,calloc工作原理及区别
- 在学校学了3年,学了c/c++,jse,j2ee,现在从头开始学java的各大底层和架构!过年之后去公司上班!
- angular路由功能uiRouter
- 我今年二十七八岁
- 顺序表的基本操作实现
- C/C++的类型安全
- 师兄的demo-垃圾安卓软件检测
- iOS开发过程中H5与OC的交互
- Android 仿微信点赞和评论弹出框
- 103. Binary Tree Zigzag Level Order Traversal
- Python 单元测试:assertTrue 和assertFalse 的真假
- 微软面试题
- POJ 3279 (枚举+二进制)
- C++返回引用