猿问

C++是不是类型安全的

慕森卡
浏览 1436回答 2
2回答

噜噜哒

c++是类型安全的,理由如下:如果C++使用得当,它将远比C更有类型安全性。相比于C,C++提供了一些新的机制保障类型安全:(1)操作符new返回的指针类型严格与对象匹配,而不是void*;(2)C中很多以void*为参数的函数可以改写为C++模板函数,而模板是支持类型检查的;(3)引入const关键字代替#define constants,它是有类型、有作用域的,而#define constants只是简单的文本替换;(4)一些#define宏可被改写为inline函数,结合函数的重载,可在类型安全的前提下支持多种类型,当然改写为模板也能保证类型安全;(5)C++提供了dynamic_cast关键字,使得转换过程更加安全,因为dynamic_cast比static_cast涉及更多具体的类型检查。即便如此,C++也不是绝对类型安全的编程语言。如果使用不得当,同样无法保证类型安全。比如下面两个例子:int i=5;void* pInt=&i;double d=(*(double*)pInt);cout<<d<<endl;输入结果不是5,而意想不到的结果:-9.25596e+061。又比如:#include<iostream>using namespace std;class Parent{};class Child1:public Parent{public:int i;Child1(int e):i(e){}};class Child2:public Parent{public:double d;Child2(double e):d(e){}};int main(){Child1 c1(5);Child2 c2(4.1);Parent* pp;Child1* pc1;pp=&c1;pc1=(Child1*)pp; //#1 强制转换,由于类型仍然为Child1*,不造成错误cout<<pc1->i<<endl;pp=&c2;pc1=(Child1*)pp; //#2 强制转换,且类型发生变化,将造成错误cout<<pc1->i<<endl;system("pause");return 0;}结果如下:51717986918请按任意键继续. . .

慕妹3146593

首先,类型安全代码指 访问被授权可以访问的内存位置。C++的指针操作是可以访问任何地址的,包括那些属于系统底层的文件。C/C++可以直接操作硬件,比如Windows系统都是C/C++写的,所以就单单这门语言而言,它不是类型安全的。
随时随地看视频慕课网APP
我要回答