日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

谷歌c++风格摘抄

發布時間:2024/8/23 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谷歌c++风格摘抄 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
全部來源于網絡,我感覺好的就復制粘貼了。

【你必需防止頭文件重復編譯。】
<PROJECT>_<PATH>_<FILE>_H_
foo/src/bar/baz.h => #ifndef FOO_BAR_BAZ_H_

【inline函數要盡量簡單。】
函數最好小于10行。
函數內包含循環、switch語句,不能定義為inline。
過長inline函數體放在inl.h文件中。

【include的順序】
當前c文件對應的頭文件->C語言系統文件->C++系統文件->第三方庫頭文件->工程公用頭文件。

【盡量減少頭文件的引用,使用前置聲明。】

【空格替換Tab,每次縮進2個空格。】

【你每行代碼的文本最多只允許80個字符寬。】

【要少用非ASCII字符,即使用的話也必須用UTF-8格式。】

【空的循環體應該用{}或continue,而不是單獨的一個分號。】

【不要用不必要的括號括起返回表達式。】

【預處理指令應該總在行首,不要縮進。】

【定義一個函數時,參數順序是:輸入參數,然后是輸出參數。】

【一個類可以被定義在另一個類內,它也被稱為成員類。】
class Foo {
private:
?? ?// Bar is a member class, nested within Foo.Bar是Foo中嵌套的成員類。
?? ?class Bar {
?? ?...
?? ?};
};

【你的類的定義應該從公開成員部分開始,接著是受保護成員,最后是私有成員。如果哪部分是空的就省略掉。】
類中各部分按public、protected和private的順序,每個關鍵字縮進1個空格。
在每部分中,聲明通常應該按下面的順序排列:
1.??? 自定義別名和枚舉
2.??? 常量(靜態常量)
3.??? 構造函數
4.??? 析構函數
5.??? 方法,包括靜態方法
6.??? 數據成員(除了靜態常量成員)

【所有按引用傳遞的參數必須被標記為常量。】
在C中,如果一個函數需要修改一個變量,就必須使用指針參數。

【我們不使用C++的異常。】
(我并不認同,不過它的優點寫得不錯)
優點:
1.??? 異常允許上層應用程序決定如何處理底層嵌套函數出現的“不該發生“的錯誤,而不是用模糊且易錯的錯誤碼記錄 。
2.??? 大數數其它現代語言中都包含異常。在C++中使用異常有助于保持與 Python Java 和其它與C++類似的語言的兼容。
3.??? 一些第三方C++庫使用異常,如果禁用異常的話就很難與這些庫整合了。
4.??? 異常是處理構造函數失敗的唯一方法。我們能用工廠函數或Init()來模擬這個特性,但這些分別需要進行堆的分配或是新增一個“無效”狀態。
5.??? 在測試框架內異常很容易使用。

【避免使用RTTI。】

【不要使用C風格的轉換。改用C++風格的轉換。】
1.??? 用static_cast進行數值轉換,或是顯式的將一個類的指針轉為它的子類的指針。
2.??? 用const_cast去掉常量性質。
3.??? 用reinterpret_cast進行不安全的指針間轉換或整型轉指針操作。只有在你清楚操作的含義及可能的后果時才能使用這種轉換。

【一個變量在自加(++i或i++)或自減(--i或i--),而沒有用到表達式的值時,必須確定到底用哪種形式。】

【能用常量的時候都要用常量。】

【C++的內建整數類型中,只使用int。如果程序中需要用到其它大小的變量,用<stdint.h>中帶精度的整數類型,如int16_t。】
整型類型中,只有int可以用。合適的話,你最好用標準類型,如size_t和ptrdiff_t。
我們經常用int,用在不會特別大的整數上,如循環計數器。這時要用POD類型int。你應該假設int至少有32位,但不要假設它超過32位。如果你需要用64位整數,就用int64_t或uint64_t。
對于可能會很大的整數,用int64_t。
你不應該用無符號整型,如uint32_t,除非你在表示一個位組而不是數字,或是你需要定義二進制補碼溢出。尤其是,不要為了指出數值永不為負而使用無符號數。你應該用斷言。

【不要用無符號數。】
糟糕的bug會在有符號數和無符號數比較時發生。
所以,用斷言來提醒變量是非負的。不要用無符號類型。

【代碼應該同時兼容32位和64位。要考慮到打印、比較、以及結構體對齊等問題。】

【用內聯函數、枚舉量、和常量來代替宏。】
使用宏就意味著你看到的代碼和編譯器最終看到的代碼是不一樣的。這會帶來難以預料的行為,特別是因為宏是全局作用域生效的。
不要用宏來展開性能要求高的代碼,改用內聯函數。不要用宏來存儲一個常數,改用常量。不要用宏來為一個名字很長的變量起個較短的別名,改用引用。不要用宏來進行條件編譯,改用……好吧,不要進行條件編譯(除非是用#define來避免多次引入頭文件)。用宏會導致很難進行測試。
下面的使用模式能避免使用宏會帶來的很多問題;如果你要用宏,就要盡量遵循這些準則:
1.??? 不要在.h文件中定義宏。
2.??? 在馬上要用到宏的地方才#define宏,用完立刻#undef。
3.??? 不要#undef一個現有的宏,僅僅因為自己的宏要用它的名字;不如為自己的宏取一個獨特的名字。
4.??? 不要用那些展開后會導致C++構造不穩定的宏,如果非要用,就在文檔中說明。
5.??? 不推薦使用##生成函數/類/變量的名字。

【0用于整數,0.0用于浮點數,nullptr用于指針,’\0’用于字符。】

【在可以的地方用sizeof(變量名)來代替sizeof(類型名)。】
用sizeof(變量名)是因為如果變量的類型改變了,它也能跟著更新。sizeof(類型名)在一些場合更有意義,但還是要避免這么用,因為變量類型改變后它沒有跟著同步改變。

【不要在局部變量之外的地方用auto。】
程序員需要懂得auto和const auto&間的區別,否則會在不想復制時出現復制。

【只用Boost庫集中被認可的部分。】
元模板編程雖然很裝逼,但是要記得,你不是一個人。

【只使用C++11(也稱為C++0x)中被認可的庫和語言擴展。在用C++11特性前先考慮一下可移植性。】
只用C++11中被認可的庫和語言特性。當前只認可下列特性:
1.??? auto(只用于局部變量)。
2.??? “>>”現在優先匹配模板參數表的結束,而不是輸出操作符。
3.??? 以范圍為基礎的 for 循環。
4.??? 整數字面值+LL和ULL后綴以產生不少于64位的類型。
5.??? 可變參數宏(但注意不鼓勵用宏)。
6.??? 所有聲明于<algorithm>和<numeric>中的新STL算法,除了聲明中包含初始化列表的min、max和minmax版本。
7.??? 用局部類型充當模板參數 。
8.??? nullptr和nullptr_t。

【永遠不要用省略字母的縮寫。】
int error_count;? // Good.
int error_cnt;??? // Bad.

【文件名應該全都用小寫,中間用“-”或“_”當分隔符。根據你的項目的慣例。如果沒有固定的習慣的話,推薦用“_”。】

【C++文件應該以.cc結尾,頭文件以.h結尾。】

【類型名以大寫字母開頭(包含typedef),且其中每個詞第一個字母都大寫,不用下劃線:MyExcitingClass,MyExcitingEnum。】

【變量名都是小寫的,每個詞之間用下劃線連接。類的成員變量名結尾有個下劃線。例如:my_exciting_local_varialbe;my_exciting_member_variable_。】
string table_name;? // OK - uses underscore.
string tablename;?? // OK - all lowercase.
string tableName;?? // Bad - mixed case.

【(類)數據成員(也被稱為實例變量或成員變量)的名字都是小寫的,可以像通常的變量名一樣帶下劃線,但結尾總要有個下劃線。】
string table_name_;? // OK - underscore at end.
string tablename_;?? // OK.

【對于全局變量沒有特別要求,少用就好,但如果你要用,考慮加個g_前綴,或其它能很容易的區分全局變量與局部變量的標記。】

【常規函數的名字大小寫混合;取值和設值函數要與對應的變量名匹配:MyExcitingFunction(),MyExcitingMethod(),my_exciting_member_variable(),set_my_exciting_member_variable()。】

【注釋:每個文件的開始是版權公告,其后是文件內容描述。】
每個文件都應包括許可證信息。為項目選擇適合的許可證版本(如Apache2.0、BSD、LGPL、GPL)。

【如果你習慣了通行的Windows風格,就很有必要重申一些你可能忘記的規范:】
1.??? 不要用匈牙利命名法(例如將整數命名為iNum)。用谷歌的命名規范,源代碼文件擴展名用.cc。
2.??? Windows定義了許多它獨有的內置類型的別名,如DWORD和HANDLE等等。在你調用Windows API時鼓勵用這些類型。即使這樣,你也應該盡量使用C++的類型名。例如,用constTCHAR*去替代LPCTSTR。
3.??? 用VC++編譯代碼時,將警告等級調到3或更高,并將所有警告都視作錯誤。
4.??? 不要用#pragma once;改用標準的頭文件守衛規則。在#define中的路徑要相對于項目根目錄。
5.??? 事實上不要用任何不標準的編譯器擴展,如#pragma和__declspec,除非你必須得這么做。用__declspec(dllimport)和__declspec(dllexport)是允許的;但你必須通過宏來調用它們,如DLLIMPORT和DLLEXPORT, 這樣別人就可以在分享使用此代碼時方便的禁用這些擴展了。
【但是,在Windows中還是有些場合我們必須打破某些規則:】
1.??? 通常我們禁止使用多個有實現的繼承;但在用COM和一些ATL/WTL類時需要這么做。這時你就可以使用多個有實現的繼承了。
2.??? 盡管你不應該在自己的代碼中用到異常,但異常被廣泛用在ATL和一些VC++的STL實現中。用ATL時,你應該定義_ATL_NO_EXCEPTIONS來禁用異常。你應該研究一下是否也可以禁用STL中的異常,如果不能的話啟用異常也沒關系。(注意這只是為了編譯STL,自己的代碼中仍然不允許用異常。)
3.??? Windows代碼文件中通常都包括預編譯好的頭文件stdafx.h或precompile.h。為了讓你的代碼方便與其它項目分享,避免顯式include此文件(除了precompile.cc),用/FI編譯選項來自動包括此文件。
4.??? 資源頭文件通常被命名為resource.h且只包括宏,不需要遵守這些風格規范。

總結

以上是生活随笔為你收集整理的谷歌c++风格摘抄的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。