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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GoogleStyle编程代码规范

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

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

頭文件相關(guān)?

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

定義:

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

優(yōu)點:

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

缺點:

濫用內(nèi)聯(lián)將導(dǎo)致程序變得更慢. 內(nèi)聯(lián)可能使目標代碼量或增或減, 這取決于內(nèi)聯(lián)函數(shù)的大小. 內(nèi)聯(lián)非常短小的存取函數(shù)通常會減少代碼大小, 但內(nèi)聯(lián)一個相當大的函數(shù)將戲劇性的增加代碼大小. 現(xiàn)代處理器由于更好的利用了指令緩存, 小巧的代碼往往執(zhí)行更快。

結(jié)論:

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

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

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

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

使用標準的頭文件包含順序可增強可讀性, 避免隱藏依賴: 相關(guān)頭文件, C 庫, C++ 庫, 其他庫的?.h, 本項目內(nèi)的?.h.

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

#include "base/logging.h"

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

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

  • C 系統(tǒng)文件

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

  • 其他庫的?.h?文件

  • 本項目內(nèi)?.h?文件

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

    作用域相關(guān)

    ?2.1. 命名空間

    小技巧

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

    定義:

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

    優(yōu)點:

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

    舉例來說, 兩個不同項目的全局作用域都有一個類?Foo, 這樣在編譯或運行時造成沖突. 如果每個項目將代碼置于不同命名空間中,?project1::Foo?和?project2::Foo?作為不同符號自然不會沖突.

    內(nèi)聯(lián)命名空間會自動把內(nèi)部的標識符放到外層作用域,比如:

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

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

    缺點:

    命名空間具有迷惑性, 因為它們使得區(qū)分兩個相同命名所指代的定義更加困難。

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

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

    在頭文件中使用匿名空間導(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ù)名的每個單詞首字母大寫 (即 “駝峰變量名” 或 “帕斯卡變量名”), 沒有下劃線. 對于首字母縮寫的單詞, 更傾向于將它們視作一個單詞進行首字母大寫 (例如, 寫作?StartRpc()?而非?StartRPC()).

    AddTableEntry() DeleteUrl() OpenFileOrDie()

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

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

    總結(jié)

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

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