GoogleC++代碼規範–翻譯學習1

來源:互聯網
上載者:User

GoogleCPP 編程規範-- 每天看點,多了也記不住,在實踐中改變自己的代碼風格吧!

Cpp檔案的命名是.cc而不是.cpp,這點不是很明白,為什麼不用cpp,而是用cc

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Scoping

1.   標頭檔#define 保護

每個標頭檔都應該有#define來防止多次被包含,定義應該是在工程目錄中的完整路徑,例如檔案 foo/src/bar/baz.h 在工程foo中應該用如下的方式來保護

#ifndef FOO_BAR_BAZ_H_

#define FOO_BAR_BAZ_H_

#endif //FOO_BAR_BAZ_H

 

標頭檔依賴

在前向聲明可以實現要求的時候,不要使用#include

當一個標頭檔被引用的時候,一個依賴關係就被建立了,當被包含的標頭檔被改變的時候,其他的檔案就要被重新編譯。所以要盡量避免#include的使用

使用者可以使用前向聲明來減少#include的使用,例如當你的標頭檔使用File類,但是不需要訪問它的聲明的時候,你就可以使用前向聲明而不是 #include “file/base/file.h”

那麼什麼時候在標頭檔中使用一個類Foo,卻不需要訪問它的定義呢

1.      聲明資料成員 Foo * 或者 Foo &

2.      我們可以用類型Foo聲明函數參數或者傳回值

3.      可以聲明一個靜態成員Foo,因為靜態成員的定義是在類的外部

但是如果類中有Foo類型的資料成員的時候,就要#include了

有時候使用指標成員而不是對象成員是有意義的,然後這使得程式可讀性和效能降低,所以如果僅僅為了使得少使用#include而強迫使用指標成員是不值得的

Note: 如果符號Foo的使用是在源檔案中,這個時候應該匯入Foo的定義,或者通過#include或者前向聲明。

 

內嵌函式

在代碼很小,少於10行的時候,可以使用內嵌函式

定義

你可以聲明一個函數為內聯,使得編譯器在調用函數的位置展開他們,而不是採用一般的函數調用機制

支援的做法

內聯可以提高目標代碼效率,所以小函數盡量使用內聯,例如set get方法或者其他的對效率要求比較高的代碼

不支援的做法

如果代碼大於10行,就不要使用內聯了。注意解構函式,因為隱式成員函數和基類析構的調用使得他們的代碼通常要大於10行。

迴圈和switch存在的函數不要使用內聯

有些時候儘管有內聯聲明,但是函數卻未必內聯。例如虛函數,遞迴。通常虛函數的作用是在類中佔一個定義,而不是出於方便或者實現它的行為。

 

-inl.h檔案

當需要的時候,可以使用inl.h檔案來定義複雜的內嵌函式

短的內嵌函式,可以在.h中直接定義,例如get set方法。如果代碼比較長的的時候,又不想把內嵌函式的定義放在.cc檔案中,可以使用-inl.h檔案來定義內嵌函式,這使得內聯實現和類實現分來,同時允許實現在需要的地方包含進來。

-inl.h另一個用途是定義模板,它使得模板定義容易讀懂,和普通的.h一樣,使用#define guard

 

函數參數的排序

參數排序的方式為:輸入,輸出

c/c++參數要麼是輸入,要麼是輸出,或者既是輸入又是輸出(例如指標,引用)。輸入參數經常是值或者常引用,輸出是非常量的指標。聲明參數的時候,輸入參數在前,不要圖方便在後面加參數,確保輸入參數在前面。

 

Includes 的名字和排序

使用標準的排序保證可讀性,同時避免隱藏的依賴:C庫,C++庫,其他庫,自訂的.h

對於.cc檔案而言,例如foo2.cc

1.      Dir2/foo2.h

2.      C 系統庫

3.      Cpp庫

4.      其他庫

5.      工程其他.h

例如


 

#include “foo/public/foosever.h” //對應的.h

#include <sys/types.h> //C庫

#include <unistd.h>

#include<hash_map> //C++庫

#include<vector>

 

#include “base/basictypes.h” //其他的工程.h

#include “base/commandlineflags.h”

#include “foo/public/bar.h”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.