Time of Update: 2018-12-04
關於類的注意事項,總結一下:1. 不在建構函式中做太多邏輯相關的初始化; 2. 編譯器提供的預設建構函式不會對變數進行初始化,如果定義了其他建構函式,編譯器不再提供,需要編碼者自行提供預設建構函式;3. 為避免隱式轉換,需將單參數建構函式聲明為explicit;……類類是C++中基本的代碼單元,自然被廣泛使用。本節列舉了在寫一個類時要做什麼、不要做什麼。 1.
Time of Update: 2018-12-04
1.對於智能指標,安全第一、方便第二,儘可能局部化(scoped_ptr); 2.引用形參加上const,否則使用指標形參;3.函數重載的使用要清晰、易讀;4.鑒於容易誤用,禁止使用預設函數參數(值得商榷);5.禁止使用變長數組;6.合理使用友元…… Google特有的風情Google有很多自己實現的使C++代碼更加健壯的技巧、功能,以及有異於別處的C++的使用方式。 1.智能指標(Smart
Time of Update: 2018-12-04
錯誤 CS0001 編譯器內部錯誤 錯誤 CS0003 記憶體溢出 錯誤 CS0004 提升為錯誤的警告 錯誤 CS0005 編譯器選項後應跟正確的參數 錯誤 CS0006 找不到動態連結的中繼資料檔案 錯誤 CS0007 .Net 環境初始化錯誤 錯誤 CS0008 從檔案中讀取中繼資料錯誤 錯誤 CS0009 不能開啟中繼資料檔案 錯誤 CS0010 名字空間與類型的聲名不能同名 錯誤 CS0011 引用的類找不到基類 錯誤 CS0012 找不到參考型別的定義
Time of Update: 2018-12-04
公司今天對我們進行技能考核,本人覺得非常無聊!裡面居然有一個可以被稱為古董的問題:如何使用c++程式查看作業系統的位元(16 位 or 32位),不能使用sizeof()函數 這個問題本身好像就是一個非常複雜的問題,程式去查看作業系統的位元,我個人覺得應該是一個很高深的問題,在Windows下應該有相應的API函數的。不知道不同版本的編譯器對是怎樣來進行處理這個問題的。我在試題上的原始碼:#include <iostream>#include
Time of Update: 2018-12-04
1.總體規則:不要隨意縮寫;2.宏、枚舉等使用全部大寫+底線;3.變數(含類、結構體成員變數)、檔案、命名空間、存取函數等使用全部小寫+底線,類成員變數以底線結尾,全域變數以g_開頭;4.參考現有或相近命名規範…… 命名規範最重要的一致性規則是命名管理,命名風格直接可以直接確定具名實體是:類型、變數、函數、常量、宏等等,無需尋找實體聲明,我們大腦中的模式比對引擎依賴於這些命名規則。命名規則具有一定隨意性,但相比按個人喜好命名,一致性更重要,所以不管你怎麼想,規則總歸是規則。 1.通用命名規則(G
Time of Update: 2018-12-04
5 範圍、模板和C++其他特性 5.1 範圍 原則5.1 使用名字空間進行歸類,避免符號衝突 說明:名字空間主要解決符號衝突問題。 樣本:兩個不同項目的全域範圍都有一個類 Foo, 這樣在編譯或運行時造成衝突。如果每個項目將 代碼置於不同名字空間中 namespace project1 { class Foo; //… } namespace project2 { class Foo;
Time of Update: 2018-12-04
6 資源分派和釋放 原則6.1 明確產品動態記憶體的申請與釋放原則 說明:之所以存在大量記憶體問題,主要原因是申請與釋放記憶體的規則混亂: 申請記憶體後,傳入子程式中,由子程式使用並釋放; 由子程式申請記憶體並返回父程式,層層調用後在某一個函數內釋放。記憶體申請與釋放一般原則: 對象在退出其範圍時,就應該立即被釋放,而且要做到:誰申請,誰釋放。 函數內分配的記憶體, 函數退出之前要釋放,避免跨函數釋放; 類中資料成員的記憶體,在解構函式中確認並釋放;
Time of Update: 2018-12-04
7 異常與錯誤處理 7.1 異常 異常是C++語言的一個強大特性,在正確使用之前需要深入瞭解,以及使用異常代碼的上下文。 原則7.1 減少不必要的異常 說明:異常對編碼技能要求更高,使用中容易出錯,首先從安全性角度考慮,盡量少用或者不用異常。 相比返回錯誤,異常的優點: 異常可以集中捕捉,錯誤偵測與演算法處理相分離,演算法邏輯更清晰;而返回錯誤在每個返回點都 要進行檢測與錯誤處理,代碼邏輯分散。
Time of Update: 2018-12-04
原創文章如需轉載請註明:轉載自風宇沖Unity3D教程學院 C#代碼注釋規範及文檔產生在使用c#進行Unity3D遊戲開發中,良好的注釋和文檔能讓開發更有效率,條理更清晰。本講分為兩個部分:一:編寫注釋二: 產生文檔 編寫注釋開發注釋是 // 協助拓展代碼使用注釋是 /// 協助使用代碼開發注釋:輔助開發,對變數或者函數等代碼的後續開發做的注釋。例如,你定義了一個私人變數 private int
Time of Update: 2018-12-04
1 常量 不變的值更易於理解、跟蹤和分析,所以應該儘可能地使用常量代替變數,定義值的時候,應該把const 作為預設的選項。 規則1.1 使用const常量取代宏 說明:宏是簡單的文本替換,在預先處理階段時完成,運行報錯時直接報相應的值;跟蹤調試時也是顯 示值,而不是宏名;宏沒有類型檢查,不安全;宏沒有範圍。 樣本: #define MAX_MSISDN_LEN (20) //不好的例子 const int MAX_MSISDN_LEN = 20; //好的例子 規則1.2
Time of Update: 2018-12-04
9 程式效率 9.1 C++語言特性的效能分級 影響軟體效能的因素眾多,包括軟體架構、運行平台(作業系統/編譯器/硬體平台)等。很多時候,程 序的效能在架構設計完成時就已經確定了。因此當一個程式的效能需要提高時,首先需要做的是用性 能偵查工具對其啟動並執行時間分布進行一個準確的測量,找出關鍵路徑和真正的瓶頸所在,然後針對瓶 頸進行分析和最佳化,而不是一味盲目地將效能低劣歸咎於所採用的語言。事實上,如果架構設計不做 修改,即使用C語言或者組合語言重新改寫,也並不能保證提高總體效能。
Time of Update: 2018-12-04
2 初始化和類型轉換 2.1 聲明、定義與初始化 規則2.1 禁止用memcpy、memset初始化非POD對象 說明:POD 全稱是“Plain Old Data”,是C++ 98標準(ISO/IEC 14882, first edition, 1998-09-01)中引入的一個概念, POD類型主要包括int, char, float,double,enumeration,void,指標等原始
Time of Update: 2018-12-04
10並發 規則10.1 多線程、進程並行訪問共用資源時,一定要加鎖保護 說明:共用資源包括全域變數,靜態變數,共用記憶體,檔案等。 建議封裝像智能指標一樣的對象對鎖進行管理,比如我們就封裝了一個auto_lock,在構造時申請 鎖,析構中釋放鎖,保證不會忘記“解鎖”。如果鎖的作用範圍有限,則可以這樣: do { auto_lock lock(&lock); //.... }while(0); 規則10.2 鎖的職責單一
Time of Update: 2018-12-04
3 函數 3.1 內嵌函式 規則3.1 內嵌函式(inline function)小於10行 說明:內嵌函式具有一般函數的特性,它與一般函數不同之處只在於函數調用的處理。一般函數進行 調用時,要將程式執行權轉到被調用函數中,然後再返回到調用它的函數中;而內嵌函式在調用時, 是將調用運算式用內嵌函式體來替換。 內嵌函式只適合於只有1~10行的小函數。對一個含有許多語句的大函數,函數調用和返回的開銷相對 來說微不足道,也沒有必要用內嵌函式實現,一般的編譯器會放棄內聯方式,而採用普通的方式調用
Time of Update: 2018-12-04
11風格 11.1 標示符命名與定義 建議11.1 類命名以大寫字母開頭,中間單詞也以大寫開頭 樣本: class UrlTable; class UrlTableProperties; 11.2 排版 建議11.2 類的聲明按照一定的次序進行,關鍵字不縮排 說明:類的聲明按照一定的次序和規範進行。建議的次序如下: 按照存取控制特性段排序:public、protected、private,如果沒有可以忽略。這個排序是讓聲
Time of Update: 2018-12-04
【線程的概念】為了瞭解線程的概念,我們必須先討論一下進程的概念。 一個進程通常定義為程式的一個執行個體。在Win32中, 進程佔據4GB的地址空間。與它們在MS-DOS和16位Windows作業系統中不同, Win32進程是沒有活力的。這就是說,一個Win32進程並不執行什麼指令,它只是佔據著4GB的地址空間,此空間中有應用程式EXE檔案的
Time of Update: 2018-12-04
POD型別(plain old data),我第一次是在Morden C++ design中看到的。說實話這確實是一本好書,裡面的技巧讓人歎為觀止。裡面提到了POD型別,該型別相容C語言的struct,主要的用處是,POD對象(特別是數組)在進行複製的時候,不必調用對象的複製建構函式或者operator=,可以直接採用memcpy函數來提高效率。Morden C++
Time of Update: 2018-12-04
注釋注釋雖然寫起來很痛苦,但對保證代碼可讀性至為重要,下面的規則描述了應該注釋什麼、注釋在哪兒。當然也要記住,注釋的確很重要,但最好的代碼本身就是文檔(self-documenting),類型和變數命名意義明確要比通過注釋解釋模糊的命名好得多。注釋是為別人(下一個需要理解你的代碼的人)而寫的,認真點吧,那下一個人可能就是你! 1.注釋風格(Comment Style)使用//或/* */,統一就好。//或/*
Time of Update: 2018-12-04
1 template specialization 模板特化一般情況下類模板定義如下:template<class Window, class Controller>class Widget{ ... 泛化實現代碼 ...};特化是指把類模板中指定的class T變成具體的類型:class Widget<ModalDialog, MyController>{ ... 特化實現代碼
Time of Update: 2018-12-04
8 標準庫 STL標準模板庫在不同產品使用程度不同,這裡列出一些基本規則和建議,供各團隊參考。 規則8.1 避免使用auto_ptr 說明:在stl庫中的std::auto_ptr具有一個隱式的所有權轉移行為,如下代碼: auto_ptr<T> p1(new T); auto_ptr<T> p2 = p1; 當執行完第2行語句後,p1已經不再指向第1行中分配的對象,而是變為NULL。正因為如此,auto_ptr 不能被置於各種標準容器中。