日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

GoogleStyle编程代码规范

發(fā)布時(shí)間:2023/12/16 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GoogleStyle编程代码规范 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://google-styleguide.readthedocs.io/zh_CN/latest/google-cpp-styleguide/headers.html#self-contained

頭文件相關(guān)?

?1.4內(nèi)聯(lián)函數(shù)

定義:

當(dāng)函數(shù)被聲明為內(nèi)聯(lián)函數(shù)之后, 編譯器會(huì)將其內(nèi)聯(lián)展開, 而不是按通常的函數(shù)調(diào)用機(jī)制進(jìn)行調(diào)用.

優(yōu)點(diǎn):

只要內(nèi)聯(lián)的函數(shù)體較小, 內(nèi)聯(lián)該函數(shù)可以令目標(biāo)代碼更加高效. 對(duì)于存取函數(shù)以及其它函數(shù)體比較短, 性能關(guān)鍵的函數(shù), 鼓勵(lì)使用內(nèi)聯(lián).

缺點(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è)相當(dāng)大的函數(shù)將戲劇性的增加代碼大小. 現(xiàn)代處理器由于更好的利用了指令緩存, 小巧的代碼往往執(zhí)行更快。

結(jié)論:

一個(gè)較為合理的經(jīng)驗(yàn)準(zhǔn)則是, 不要內(nèi)聯(lián)超過 10 行的函數(shù). 謹(jǐn)慎對(duì)待析構(gòu)函數(shù), 析構(gòu)函數(shù)往往比其表面看起來要更長(zhǎng), 因?yàn)橛须[含的成員和基類析構(gòu)函數(shù)被調(diào)用!

另一個(gè)實(shí)用的經(jīng)驗(yàn)準(zhǔn)則: 內(nèi)聯(lián)那些包含循環(huán)或?switch?語句的函數(shù)常常是得不償失 (除非在大多數(shù)情況下, 這些循環(huán)或?switch?語句從不被執(zhí)行).

有些函數(shù)即使聲明為內(nèi)聯(lián)的也不一定會(huì)被編譯器內(nèi)聯(lián), 這點(diǎn)很重要; 比如虛函數(shù)和遞歸函數(shù)就不會(huì)被正常內(nèi)聯(lián). 通常, 遞歸函數(shù)不應(yīng)該聲明成內(nèi)聯(lián)函數(shù).(YuleFox 注: 遞歸調(diào)用堆棧的展開并不像循環(huán)那么簡(jiǎn)單, 比如遞歸層數(shù)在編譯時(shí)可能是未知的, 大多數(shù)編譯器都不支持內(nèi)聯(lián)遞歸函數(shù)). 虛函數(shù)內(nèi)聯(lián)的主要原因則是想把它的函數(shù)體放在類定義內(nèi), 為了圖個(gè)方便, 抑或是當(dāng)作文檔描述其行為, 比如精短的存取函數(shù).

1.5.?#include?的路徑及順序?

使用標(biāo)準(zhǔn)的頭文件包含順序可增強(qiáng)可讀性, 避免隱藏依賴: 相關(guān)頭文件, C 庫, C++ 庫, 其他庫的?.h, 本項(xiàng)目?jī)?nèi)的?.h.

項(xiàng)目?jī)?nèi)頭文件應(yīng)按照項(xiàng)目源代碼目錄樹結(jié)構(gòu)排列, 避免使用 UNIX 特殊的快捷目錄?.?(當(dāng)前目錄) 或?..?(上級(jí)目錄). 例如,?google-awesome-project/src/base/logging.h?應(yīng)該按如下方式包含:

#include "base/logging.h"

又如,?dir/foo.cc?或?dir/foo_test.cc?的主要作用是實(shí)現(xiàn)或測(cè)試?dir2/foo2.h?的功能,?foo.cc?中包含頭文件的次序如下:

  • dir2/foo2.h?(優(yōu)先位置, 詳情如下)

  • C 系統(tǒng)文件

  • C++ 系統(tǒng)文件

  • 其他庫的?.h?文件

  • 本項(xiàng)目?jī)?nèi)?.h?文件

  • 這種優(yōu)先的順序排序保證當(dāng)?dir2/foo2.h?遺漏某些必要的庫時(shí),?dir/foo.cc?或?dir/foo_test.cc?的構(gòu)建會(huì)立刻中止。因此這一條規(guī)則保證維護(hù)這些文件的人們首先看到構(gòu)建中止的消息而不是維護(hù)其他包的人們。

    作用域相關(guān)

    ?2.1. 命名空間

    小技巧

    鼓勵(lì)在?.cc?文件內(nèi)使用匿名命名空間或?static?聲明. 使用具名的命名空間時(shí), 其名稱可基于項(xiàng)目名或相對(duì)路徑. 禁止使用 using 指示(using-directive)。禁止使用內(nèi)聯(lián)命名空間(inline namespace)。

    定義:

    命名空間將全局作用域細(xì)分為獨(dú)立的, 具名的作用域, 可有效防止全局作用域的命名沖突.

    優(yōu)點(diǎn):

    雖然類已經(jīng)提供了(可嵌套的)命名軸線 (YuleFox 注: 將命名分割在不同類的作用域內(nèi)), 命名空間在這基礎(chǔ)上又封裝了一層.

    舉例來說, 兩個(gè)不同項(xiàng)目的全局作用域都有一個(gè)類?Foo, 這樣在編譯或運(yùn)行時(shí)造成沖突. 如果每個(gè)項(xiàng)目將代碼置于不同命名空間中,?project1::Foo?和?project2::Foo?作為不同符號(hào)自然不會(huì)沖突.

    內(nèi)聯(lián)命名空間會(huì)自動(dòng)把內(nèi)部的標(biāo)識(shí)符放到外層作用域,比如:

    namespace X { inline namespace Y { void foo(); } // namespace Y } // namespace X

    X::Y::foo()?與?X::foo()?彼此可代替。內(nèi)聯(lián)命名空間主要用來保持跨版本的 ABI 兼容性。

    缺點(diǎn):

    命名空間具有迷惑性, 因?yàn)樗鼈兪沟脜^(qū)分兩個(gè)相同命名所指代的定義更加困難。

    內(nèi)聯(lián)命名空間很容易令人迷惑,畢竟其內(nèi)部的成員不再受其聲明所在命名空間的限制。內(nèi)聯(lián)命名空間只在大型版本控制里有用。

    有時(shí)候不得不多次引用某個(gè)定義在許多嵌套命名空間里的實(shí)體,使用完整的命名空間會(huì)導(dǎo)致代碼的冗長(zhǎng)。

    在頭文件中使用匿名空間導(dǎo)致違背 C++ 的唯一定義原則 (One Definition Rule (ODR)).

    7.4. 變量命名?

    ?總述

    變量 (包括函數(shù)參數(shù)) 和數(shù)據(jù)成員名一律小寫, 單詞之間用下劃線連接. 類的成員變量以下劃線結(jié)尾, 但結(jié)構(gòu)體的就不用, 如:?a_local_variable,?a_struct_data_member,?a_class_data_member_.

    ?7.6. 函數(shù)命名

    總述

    常規(guī)函數(shù)使用大小寫混合, 取值和設(shè)值函數(shù)則要求與變量名匹配:?MyExcitingFunction(),?MyExcitingMethod(),?my_exciting_member_variable(),?set_my_exciting_member_variable().

    說明

    一般來說, 函數(shù)名的每個(gè)單詞首字母大寫 (即 “駝峰變量名” 或 “帕斯卡變量名”), 沒有下劃線. 對(duì)于首字母縮寫的單詞, 更傾向于將它們視作一個(gè)單詞進(jìn)行首字母大寫 (例如, 寫作?StartRpc()?而非?StartRPC()).

    AddTableEntry() DeleteUrl() OpenFileOrDie()

    (同樣的命名規(guī)則同時(shí)適用于類作用域與命名空間作用域的常量, 因?yàn)樗鼈兪亲鳛?API 的一部分暴露對(duì)外的, 因此應(yīng)當(dāng)讓它們看起來像是一個(gè)函數(shù), 因?yàn)樵谶@時(shí), 它們實(shí)際上是一個(gè)對(duì)象而非函數(shù)的這一事實(shí)對(duì)外不過是一個(gè)無關(guān)緊要的實(shí)現(xiàn)細(xì)節(jié).)

    取值和設(shè)值函數(shù)的命名與變量一致. 一般來說它們的名稱與實(shí)際的成員變量對(duì)應(yīng), 但并不強(qiáng)制要求. 例如?int?count()?與?void?set_count(int?count).

    總結(jié)

    以上是生活随笔為你收集整理的GoogleStyle编程代码规范的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。