免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Google C 編程規(guī)范

一、頭文件

1. #define 的保護(hù)

2. 頭文件依賴(lài)

3. 內(nèi)聯(lián)函數(shù)

4. -inl.h 文件

5. 函數(shù)參數(shù)順序(Function Parameter Ordering)

6. 包含文件的名稱(chēng)及次序

二、作用域

1. 命名空間(Namespaces)

2. 嵌套類(lèi)(Nested Class)

3. 非成員函數(shù)( Nonmember)、靜態(tài)成員函數(shù)( Static Member)和全局函數(shù)(Global Functions)

4. 局部變量(Local Variables)

5. 全局變量(Global Variables)

三、類(lèi)

1. 構(gòu)造函數(shù)(Constructor)的職責(zé)

2. 默認(rèn)構(gòu)造函數(shù)(Default Constructors)

3. 明確的構(gòu)造函數(shù)(Explicit Constructors)

4. 拷貝構(gòu)造函數(shù)(Copy Constructors)

5. 結(jié)構(gòu)體和類(lèi)(Structs vs. Classes)

6. 繼承(Inheritance)

7. 多重繼承(Multiple Inheritance)

8. 接口(Interface)

9. 操作符重載(Operator Overloading)

10. 存取控制(Access Control)

11. 聲明次序(Declaration Order)

12. 編寫(xiě)短小函數(shù)(Write Short Functions)

四、Google 特有的風(fēng)情

1. 智能指針(Smart Pointers)

五、其他C++特性

1. 引用參數(shù)(Reference Arguments)

2. 函數(shù)重載(Function Overloading)

3. 缺省參數(shù)(Default Arguments)

4. 變長(zhǎng)數(shù)組和alloca(Variable-Length Arrays and alloca())

5. 友元(Friends)

6. 異常(Exceptions)

7. 運(yùn)行時(shí)類(lèi)型識(shí)別(Run-Time Type Information, RTTI)

8. 類(lèi)型轉(zhuǎn)換(Casting)

9. 流(Streams)

10. 前置自增和自減(Preincrement and Predecrement)

11. const 的使用(Use of const)

12. 整型(Integer Types)

13. 64 位下的可移植性(64-bit Portability)

14. 預(yù)處理宏(Preprocessor Macros)

15. 0 和 NULL(0 and NULL)

16. sizeof(sizeof)

17. Boost 庫(kù)(Boost)

六、命名約定

1. 通用命名規(guī)則(General Naming Rules)

2. 文件命名(File Names)

3. 類(lèi)型命名(Type Names)

4. 變量命名(Variable Names)

5. 常量命名(Constant Names)

6. 函數(shù)命名(Function Names)

7. 命名空間(Namespace Names)

8. 枚舉命名(Enumerator Names)

9. 宏命名(Macro Names)

10. 命名規(guī)則例外(Exceptions to Naming Rules)

七、注釋

1. 注釋風(fēng)格(Comment Style)

2. 文件注釋?zhuān)‵ile Comments)

3. 類(lèi)注釋?zhuān)–lass Comments)

4. 函數(shù)注釋?zhuān)‵unction Comments)

5. 變量注釋?zhuān)╒ariable Comments)

6. 實(shí)現(xiàn)注釋?zhuān)↖mplementation Comments)

7. 標(biāo)點(diǎn)、拼寫(xiě)和語(yǔ)法(Punctuation, Spelling and Grammar)

8. TODO 注釋?zhuān)═ODO Comments)

八、格式

1. 行長(zhǎng)度(Line Length)

2. 非 ASCII 字符(Non-ASCII Characters)

3. 空格還是制表位(Spaces vs. Tabs)

4. 函數(shù)聲明與定義(Function Declarations and Definitions)

5. 函數(shù)調(diào)用(Function Calls)

6. 條件語(yǔ)句(Conditionals)

7. 循環(huán)和開(kāi)關(guān)選擇語(yǔ)句(Loops and Switch Statements)

8. 指針和引用表達(dá)式(Pointers and Reference Expressions)

9. 布爾表達(dá)式(Boolean Expressions)

10. 函數(shù)返回值(Return Values)

11. 變量及數(shù)組初始化(Variable and Array Initialization)

12. 預(yù)處理指令(Preprocessor Directives)

13. 類(lèi)格式(Class Format)

14. 初始化列表(Initializer Lists)

15. 命名空間格式化(Namespace Formatting)

16. 水平留白(Horizontal Whitespace)

17. 垂直留白(Vertical Whitespace)

九、規(guī)則之例外

1. 現(xiàn)有不統(tǒng)一代碼(Existing Non-conformant Code)

2. Windows 代碼(Windows Code)

十、團(tuán)隊(duì)合作

一、頭文件

通常,每一個(gè).cc 文件(C++的源文件)都有一個(gè)對(duì)應(yīng)的.h 文件(頭文件),也有一些例

外,如單元測(cè)試代碼和只包含main()的.cc 文件。

正確使用頭文件可令代碼在可讀性、文件大小和性能上大為改觀。

下面的規(guī)則將引導(dǎo)你規(guī)避使用頭文件時(shí)的各種麻煩。

1. #define的保護(hù)

所有頭文件都應(yīng)該使用#define 防止頭文件被多重包含(multiple inclusion),命名格式

當(dāng)是:<PROJECT>_<PATH>_<FILE>_H_

為保證唯一性,頭文件的命名應(yīng)基于其所在項(xiàng)目源代碼樹(shù)的全路徑。例如,項(xiàng)目foo 中的頭

文件foo/src/bar/baz.h 按如下方式保護(hù):

#ifndef FOO_BAR_BAZ_H_

#define FOO_BAR_BAZ_H_

...

#endif // FOO_BAR_BAZ_H_

2. 頭文件依賴(lài)

使用前置聲明(forward declarations)盡量減少.h 文件中#include 的數(shù)量。

當(dāng)一個(gè)頭文件被包含的同時(shí)也引入了一項(xiàng)新的依賴(lài)(dependency),只要該頭文件被修改,

代碼就要重新編譯。如果你的頭文件包含了其他頭文件,這些頭文件的任何改變也將導(dǎo)致那

些包含了你的頭文件的代碼重新編譯。因此,我們寧可盡量少包含頭文件,尤其是那些包含

在其他頭文件中的。

使用前置聲明可以顯著減少需要包含的頭文件數(shù)量。舉例說(shuō)明:頭文件中用到類(lèi)File,但不

需要訪問(wèn)File 的聲明,則頭文件中只需前置聲明class File;無(wú)需#include

'file/base/file.h'。

在頭文件如何做到使用類(lèi)Foo 而無(wú)需訪問(wèn)類(lèi)的定義?

1) 將數(shù)據(jù)成員類(lèi)型聲明為Foo *或Foo &;

2) 參數(shù)、返回值類(lèi)型為Foo 的函數(shù)只是聲明(但不定義實(shí)現(xiàn));

3) 靜態(tài)數(shù)據(jù)成員的類(lèi)型可以被聲明為Foo,因?yàn)殪o態(tài)數(shù)據(jù)成員的定義在類(lèi)定義之外。

另一方面,如果你的類(lèi)是Foo 的子類(lèi),或者含有類(lèi)型為Foo 的非靜態(tài)數(shù)據(jù)成員,則必須為

之包含頭文件。

有時(shí),使用指針成員(pointer members,如果是scoped_ptr 更好)替代對(duì)象成員(object

members)的確更有意義。然而,這樣的做法會(huì)降低代碼可讀性及執(zhí)行效率。如果僅僅為

了少包含頭文件,還是不要這樣替代的好。

當(dāng)然,.cc 文件無(wú)論如何都需要所使用類(lèi)的定義部分,自然也就會(huì)包含若干頭文件。

譯者注:能依賴(lài)聲明的就不要依賴(lài)定義。

3. 內(nèi)聯(lián)函數(shù)

只有當(dāng)函數(shù)只有10 行甚至更少時(shí)才會(huì)將其定義為內(nèi)聯(lián)函數(shù)(inline function)。

定義(Definition):當(dāng)函數(shù)被聲明為內(nèi)聯(lián)函數(shù)之后,編譯器可能會(huì)將其內(nèi)聯(lián)展開(kāi),無(wú)需

按通常的函數(shù)調(diào)用機(jī)制調(diào)用內(nèi)聯(lián)函數(shù)。

優(yōu)點(diǎn):當(dāng)函數(shù)體比較小的時(shí)候,內(nèi)聯(lián)該函數(shù)可以令目標(biāo)代碼更加高效。對(duì)于存取函數(shù)

(accessor、mutator)以及其他一些比較短的關(guān)鍵執(zhí)行函數(shù)。

缺點(diǎn):濫用內(nèi)聯(lián)將導(dǎo)致程序變慢,內(nèi)聯(lián)有可能是目標(biāo)代碼量或增或減,這取決于被內(nèi)聯(lián)的函

數(shù)的大小。內(nèi)聯(lián)較短小的存取函數(shù)通常會(huì)減少代碼量,但內(nèi)聯(lián)一個(gè)很大的函數(shù)(譯者注:如

果編譯器允許的話)將戲劇性的增加代碼量。在現(xiàn)代處理器上,由于更好的利用指令緩存

(instruction cache),小巧的代碼往往執(zhí)行更快。

結(jié)論:一個(gè)比較得當(dāng)?shù)奶幚硪?guī)則是,不要內(nèi)聯(lián)超過(guò)10 行的函數(shù)。對(duì)于析構(gòu)函數(shù)應(yīng)慎重對(duì)待,

析構(gòu)函數(shù)往往比其表面看起來(lái)要長(zhǎng),因?yàn)橛幸恍╇[式成員和基類(lèi)析構(gòu)函數(shù)(如果有的話)被

調(diào)用!

另一有用的處理規(guī)則:內(nèi)聯(lián)那些包含循環(huán)或switch 語(yǔ)句的函數(shù)是得不償失的,除非在大多

數(shù)情況下,這些循環(huán)或switch 語(yǔ)句從不執(zhí)行。

重要的是,虛函數(shù)和遞歸函數(shù)即使被聲明為內(nèi)聯(lián)的也不一定就是內(nèi)聯(lián)函數(shù)。通常,遞歸函數(shù)

不應(yīng)該被聲明為內(nèi)聯(lián)的(譯者注:遞歸調(diào)用堆棧的展開(kāi)并不像循環(huán)那么簡(jiǎn)單,比如遞歸層數(shù)

在編譯時(shí)可能是未知的,大多數(shù)編譯器都不支持內(nèi)聯(lián)遞歸函數(shù))。析構(gòu)函數(shù)內(nèi)聯(lián)的主要原因

是其定義在類(lèi)的定義中,為了方便抑或是對(duì)其行為給出文檔。

4. -inl.h文件

復(fù)雜的內(nèi)聯(lián)函數(shù)的定義,應(yīng)放在后綴名為-inl.h 的頭文件中。

在頭文件中給出內(nèi)聯(lián)函數(shù)的定義,可令編譯器將其在調(diào)用處內(nèi)聯(lián)展開(kāi)。然而,實(shí)現(xiàn)代碼應(yīng)完

全放到.cc 文件中,我們不希望.h 文件中出現(xiàn)太多實(shí)現(xiàn)代碼,除非這樣做在可讀性和效率上

有明顯優(yōu)勢(shì)。

如果內(nèi)聯(lián)函數(shù)的定義比較短小、邏輯比較簡(jiǎn)單,其實(shí)現(xiàn)代碼可以放在.h 文件中。例如,存

取函數(shù)的實(shí)現(xiàn)理所當(dāng)然都放在類(lèi)定義中。出于實(shí)現(xiàn)和調(diào)用的方便,較復(fù)雜的內(nèi)聯(lián)函數(shù)也可以

放到.h 文件中,如果你覺(jué)得這樣會(huì)使頭文件顯得笨重,還可以將其分離到單獨(dú)的-inl.h 中。

這樣即把實(shí)現(xiàn)和類(lèi)定義分離開(kāi)來(lái),當(dāng)需要時(shí)包含實(shí)現(xiàn)所在的-inl.h 即可。

-inl.h 文件還可用于函數(shù)模板的定義,從而使得模板定義可讀性增強(qiáng)。

要提醒的一點(diǎn)是,-inl.h 和其他頭文件一樣,也需要#define 保護(hù)。

5. 函數(shù)參數(shù)順序(Function Parameter Ordering)

定義函數(shù)時(shí),參數(shù)順序?yàn)椋狠斎雲(yún)?shù)在前,輸出參數(shù)在后。

C/C++函數(shù)參數(shù)分為輸入?yún)?shù)和輸出參數(shù)兩種,有時(shí)輸入?yún)?shù)也會(huì)輸出(譯者注:值被修

改時(shí))。輸入?yún)?shù)一般傳值或常數(shù)引用(const references),輸出參數(shù)或輸入/輸出參數(shù)

為非常數(shù)指針(non-const pointers)。對(duì)參數(shù)排序時(shí),將所有輸入?yún)?shù)置于輸出參數(shù)之

前。不要僅僅因?yàn)槭切绿砑拥膮?shù),就將其置于最后,而應(yīng)該依然置于輸出參數(shù)之前。

這一點(diǎn)并不是必須遵循的規(guī)則,輸入/輸出兩用參數(shù)(通常是類(lèi)/結(jié)構(gòu)體變量)混在其中,會(huì)

使得規(guī)則難以遵循。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
1 頭文件
Google_CPP編碼規(guī)范
你可能不知道的19個(gè)JavaScript編碼技巧
12個(gè)步驟教你理解Python裝飾器
Makefile的編寫(xiě)指導(dǎo)
PHP特性
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服