2 回答

TA貢獻1784條經(jīng)驗 獲得超7個贊
c++是類型安全的,理由如下:
如果C++使用得當,它將遠比C更有類型安全性。相比于C,C++提供了一些新的機制保障類型安全:
(1)操作符new返回的指針類型嚴格與對象匹配,而不是void*;
(2)C中很多以void*為參數(shù)的函數(shù)可以改寫為C++模板函數(shù),而模板是支持類型檢查的;
(3)引入const關鍵字代替#define constants,它是有類型、有作用域的,而#define constants只是簡單的文本替換;
(4)一些#define宏可被改寫為inline函數(shù),結合函數(shù)的重載,可在類型安全的前提下支持多種類型,當然改寫為模板也能保證類型安全;
(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 強制轉換,且類型發(fā)生變化,將造成錯誤
cout<<pc1->i<<endl;
system("pause");
return 0;
}
結果如下:
5
1717986918
請按任意鍵繼續(xù). . .

TA貢獻1820條經(jīng)驗 獲得超9個贊
首先,類型安全代碼指 訪問被授權可以訪問的內(nèi)存位置。C++的指針操作是可以訪問任何地址的,包括那些屬于系統(tǒng)底層的文件。C/C++可以直接操作硬件,比如Windows系統(tǒng)都是C/C++寫的,所以就單單這門語言而言,它不是類型安全的。
- 2 回答
- 0 關注
- 1491 瀏覽
添加回答
舉報