c++之類型安全

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使得轉換過程更安全。

儘管如此,但如果使用空類型指針或者在兩個不同類型指針間做強制轉換,很可能引發類型不安全的問題。


4、總結

想要保證程序的類型安全,儘量避免使用空類型指針,儘量不對不同類型的指針做強制轉換。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章