C 高階之三 型別安全和STL 儲存之廚

2022-09-22 23:45:13 字數 741 閱讀 8836

不要動態地處理陣列

這裡主要有兩個意思:

不用支援動態地基類的指標進行++、+n這種操作,因為它實際會按基類大小進行偏移計算,而非預期地按照子類的大小進行偏移計算;

2.盡量在介面中使用引用而非指標,原因就在於期望清楚地表面所討論的是乙個物件,而不是物件陣列;

不要使用失效物件

經常容易忽略的失效物件包括:

語義失效物件:指向已刪除物件的虛懸(dangling)指標

失效的迭代器:比如,在迭代器所指向的容器開始插入之後的vector::iterator i

不要使用不安全的c語言的遺留函式:strcpy\sprintf 的緩衝區都沒有檢查範圍;strncpy\snprintf 雖然檢查緩衝區界限,但是到達緩衝區界限時卻不新增null。因此都是不安全的

不要使用可變長引數(...)c++ 中可變長引數的缺點包括:

缺乏型別安全性。 省略號本質是告訴編譯器:關閉所有的檢查,從此由我接管,啟動reinterpret_cast

呼叫者和被呼叫者存在緊密耦合;

類型別物件的行為沒有定義;

引數的數量未知

不同架構和編譯器中sizeof(long)可能不等於sizeof (char *)

減少了**的可讀性;

不要用memcpy 複製物件、不用用memcmp 比較物件編譯器會在多型物件中嵌入一些隱藏資料(所謂的虛函式表指標vptr),使用虛擬繼承的時候,大部分編譯器實現會新增更多內部指標。一般使用中,由編譯器負責管理所有這些隱藏資料。

Haskell 筆記 三 型別

haskell有強大的型別系統 每個表示式在編譯時都會明確型別,因此可以有更多的資訊來檢查錯誤。支援型別推導。prelude t true true bool prelude t a a char prelude t hi hi char prelude t true,a true,a bool,c...

編譯原理(三)型別檢查

型別系統 型別檢查 多態函式 過載 上面不能在不該出現continue的地方出現continue。c語言 問題 如果a是乙個陣列名,那麼表示式a和 a的值都是陣列a第乙個元素的位址,它們的使用是否有區別?用四個c檔案的編譯報錯或執行結果來提示 上面報錯,返回的a不能作為二位陣列的指標 返回a的指標時...

PHP學習筆記(三) 型別 布林型

下面效果相同,說明true和false並不區分大小寫。再為大家介紹兩種方式,因為 很簡單,所以不做贅述了。vs 下面介紹一種應用 轉換為布林值 要明示地將乙個值轉換成 boolean,用 bool 或者 boolean 來強制轉換。但是很多情況下不需要用強制轉換,因為當運算子,函式或者流程控制需要乙...