對於我這樣乙個c語言的程式設計師來說,編寫c++的機會其實不太多。但是我還是比較喜歡寫c++語言,原因主要有幾個方面:(1)自己學c++語言的時間比較長了,也比較了解,如果從大一的時候算起,現在也有小十年了;(2)windows下面的開發工具確實很好用,比如偵錯程式呼叫、彙編**檢視也方便,學起來其實沒有什麼障礙;(3)基於c++語言的開源專案還是比較多的,比如說的emule、webkit、notepad++、libsvm,掌握好c++語言對自己的幫助還是挺大的。
網上有位知名的朋友叫雲風,早期在他寫的書《我的程式設計感悟》當中也是對c++大加褒獎,可是在後來的工程實踐中反而感覺到c語言才是最好用的語言。相信很多的朋友都有類似的經驗。當然,不可否認c++還是存在很大的市場,但是它的應用範圍和過去相比,確實是大大縮小了。一方面,精通c++的人實在是太少了,用好c++的人更是鳳毛麟角;另外一方面,c++的學習代價、應用代價實在是很高,你沒有辦法要求專案組裡邊的每個人都有很高的c++應用水平,這是沒有辦法做到的,就算做到了,代價是十分昂貴的。所以,為了消除彼此成員之間的差別,很多時候c++的程式設計規範就變成了c語言的程式設計規範,這可以從google c++ style guide可以看出來。
(1) 總則
a)盡量選擇所有編譯器都支援的c++標準
b)必須了解類的記憶體分布結構
c)必須了解編譯器對c++的**操作
d)指標是所有錯誤的**,盡量用引用代替
e)用const對入參、出參和類函式進行限制
f)多用namespace限定類的作用範圍
g)少用c++的高階特性
h)時刻在需要處理c檔案的時候新增extern 「c」
i)string類是萬惡之源,盡量少用
(2)標頭檔案
a)定義標頭檔案的時候首先新增編譯巨集
b)新增最少的標頭檔案依賴
c)頭檔名爭取和類名一致
d)標頭檔案中只包括型別定義、巨集定義和函式宣告
e)類的標頭檔案和實現檔案一一對應
(3)命名
a)類的命名按照首字母大寫的格式進行,比如parent
b)巨集按照全大寫的格式進行,比如max
c)函式按照小寫進行,中間用連詞號連線,比如get_max_number
d)變數按照乙個單詞進行,比如number,index等等
e)變數、函式多用static限定範圍,類多用namespace限定範圍
(4)函式
a)杜絕可變參的函式,不利於編譯器檢查
b)少用全域性函式
c)函式入參多用引用型別
d)返回值多用引用型別,但是臨時變數不能用引用
e)全域性函式少用過載,最好不用
f)最好不用使用模板函式,即使使用也只限定於自己使用
(5)類
a)少用繼承,多用組合
b)對於建構函式,多用explicit,防止編譯器強行轉換
c)對於指標成員變數,務必注意拷貝建構函式和賦值函式的編寫
d)對於類指標,為了防止記憶體洩漏或者資源重複釋放,最好自己管理,不要相信智慧型指標
e)繼承類中的析構函式要定義為virtual型別
f)建構函式要簡單,複雜的資源分配請在類成員函式init中定義
g)對於全域性類變數,相互定義之間不要存在依賴
h)嚴格區分類指標的釋放,注意delete和delete的區別
i)對於類中鎖的問題,可以利用類的構造、析構、引用特性解決
j)多用class,少用struct
(6)類的高階特性
a)不要使用算術符過載
b)不要用模板,除非自己用,自己用也要少用
c)不用使用c++中的typeid屬性
d)不要用異常
e)不要用virtual繼承
f)不要用多類繼承
g)不用要stl,當類中存在指標變數的時候,stl很多時候是搞不定的,而vector、list、find、sort你是搞得定的
隨想錄(cuda程式設計)
很早就知道gpu可以被用來進行加速處理,但是不知道基本原理是什麼。昨天看了一下別人的示範 突然之間明白了很多。為了防止自己忘記這些知識點,特地做如下紀錄。1 顯示卡程式設計 gpu主要是指顯示卡上的處理器部分。顯示卡和cpu之間主要通過pci或者pcie連線,所以必然要求生成的可執行檔案一部分在ho...
隨想錄(uclibc的學習)
對於交叉工具鏈來說,uclibc一般都是包括在工具鏈裡面的。通過uclibc,大家可以像開發x86使用者程式一樣,開發其他cpu上的應用程式。uclibc相比較glibc而言,包含的檔案較少,功能也有刪減,且每乙個目錄代表乙個動態庫,閱讀起來基本不會遇到什麼問題。1 uclibc的 怎麼看?建議直接...
隨想錄(epoll的使用)
要說linux下面最好用的介面恐怕就是epoll了。不管是網路程式設計,還是其他pipe程式設計,使用epoll都很方便。而且,epoll的函式個數少,結構也非常簡單。一般只要學好了epoll create epoll ctl epoll wait close這四個函式就可以了。如果大家有這方面的需...