名稱空間
變體
操作

幫助:風格手冊

來自 cppreference.com

此頁面包含一個設計指南,旨在幫助在本維基中保持一致的風格和格式。請注意,此指南列表既非最終也非完整,即可以新增新的指南,並且如果有利,可以更改當前的指南。

目錄

[編輯] 頁面結構

本維基的大多數頁面遵循以下模式

[編輯] 標題覆蓋

標題覆蓋幾乎是強制性的,否則 MediaWiki 將顯示頁面的路徑。

如果特性不是任何類的成員,則直接使用 {{ctitle}} 或 {{cpp/title}} 覆蓋標題。否則,將建立一個抽象容器類名的輔助模板。例如,考慮 std::class::func()

cpp/blah/class/func 包含 {{cpp/blah/class/title|func}}

Template:cpp/blah/class/title 包含 {{cpp/title|n=class|{{{1}}}}}。此輔助模板用於該類的所有成員。

[編輯] 導航欄

導航欄透過提供指向相關頁面的連結來改善導航。導航欄通常使用 {{navbar}} 模板實現。最終的定義通常放在 Template:path/to/page/navbar

{{navbar}} 模板定義了一個始終可見的標題和懸停時顯示的內容。兩者的定義通常分別放在 Template:path/to/page/navbar headingTemplate:path/to/page/navbar content 的單獨模板中。

內容通常是相關函式和類的列表。該列表通常使用 nv 模板族實現。

導航欄的定義包括其每個父頁面的標題和內容模板。

{{mark c++11}} 應在導航欄中使用,而不是 {{mark since c++11}},以節省空間。

[編輯] 類或函式的宣告

宣告按照標頭檔案中定義的方式放置。模板和引數名稱儘可能根據本維基中的常用名稱進行重新命名。dcl 族模板用於處理格式。

[編輯] 描述

描述通常包含一些解釋類/函式/物件等行為的文字,以及分類到單獨部分(見下文)的其他資訊。

描述文字的第一句話必須總結該特性的行為。其長度不應超過約200個字元(大約兩行文字)。

[編輯]

類的描述通常遵循以下模式(按順序排列的章節列表)

  • 概要
  • 描述文字
  • 類不變數
  • 模板引數(如果該類是模板)
  • 成員型別(公共/私有/保護/僅暴露)
  • 成員函式(公共/私有/保護/僅暴露)
  • 成員物件(公共/私有/保護/僅暴露)
  • 非成員函式
  • 輔助型別
  • 輔助類
  • 備註(可能包括 FTM 表)
  • 示例
  • 缺陷報告(如果有)
  • 參考(指向規範文件的連結)
  • 另請參閱
  • 外部連結(如果有)

dsc 模板族用於處理成員型別、函式或物件列表以及相關非成員函式或類列表的格式。

通常,相同的成員描述片段(例如 {{dsc mem fun| cpp/component/class/fun_function| 函式的描述}}) 將包含在其他頁面的另請參見部分中。為了減少重複,值得將這些片段放入單獨的模板中,然後使用 {{dsc inc}} 來包含它們。

例如:

cpp/component/class

 
  {{dsc begin}}
  {{dsc h1 | Member functions}}
  {{dsc inc | cpp/component/class/dsc fun_function}}
  {{dsc end}}
  

cpp/component/class/another_function

 
  ...
  ...
  ===See also===
  {{dsc begin}}
  {{dsc inc | cpp/component/class/dsc fun_function}}
  {{dsc end}}
  

Template:cpp/component/class/dsc fun_function

 
  {{dsc mem fun | cpp/component/class/fun_function | description of the function}}
  

如果相同的描述片段在多個類中以相同的方式使用,例如在容器庫中,一個模板可以消除多達20個地方的重複。

[編輯] 函式

函式的描述通常遵循以下模式(按順序排列的章節列表)

  • 概要
  • 描述文字
  • 模板引數(如果函式是模板)
  • 引數
  • 返回值
  • 前置條件
  • 後置條件
  • 異常
  • 複雜度
  • 備註(可能包括 FTM 表)
  • 可能的實現
  • 示例
  • 缺陷報告(如果有)
  • 參考(指向規範文件的連結)
  • 另請參閱
  • 外部連結(如果有)

所有函式引數名稱都以 等寬字型 書寫。

par 模板族用於處理引數描述的格式。

應省略引數返回值異常等規範的空章節。一種已棄用但仍廣泛使用的方法是用“(none)”標籤標記空章節。

{{eq fun}} 或 {{eq impl}} 可用於呈現等效程式碼(可能的實現)。

{{example}} 可用於呈現示例。

[編輯] 物件、常量、型別

物件、常量或型別的描述通常只包含描述。

[編輯] 演算法函式物件(niebloids)

演算法函式物件(又稱 niebloid)的描述通常遵循與函式相同的模式,但引言中應包含 {{cpp/ranges/niebloid}}。

[編輯] 概念

概念的描述通常只包含描述。

[編輯] 另請參見列表

列出相關函式、類等。{{dsc ...}} 模板族用於處理格式。

[編輯] 程式碼格式

[編輯] 大小寫

名稱的大小寫方式與大多數 C++ 標準中的方式相同。標準組件的文件應遵循以下風格:

  • 函式引數使用 small_caps 風格
  • 模板引數使用 CamelCase 風格

在示例和其他文件中,適用以下附加指南:

  • 自定義類名使用 CamelCase 風格
  • 變數名使用 small_caps 風格
  • 宏和常量名使用 ALL_CAPS 風格

[編輯] 間距和縮排

  • 使用 K&R 縮排風格(參見 K&R TBS)。
  • 標準結構,即 forwhileif 等,在識別符號和左括號之間有一個空格,例如:
    for (...).
  • 函式名與括號之間,以及括號與括號內的內容之間沒有空格,例如 fun(...)
  • 模板名與 < 符號之間,以及 <> 符號與模板引數之間沒有空格,例如 tmp<...>
  • 多個函式或模板引數之間用逗號的空格分隔。
  • 引用和指標(&*)修飾符與型別名之間沒有空格(例如 int& b)。
  • 如果函式的引數跨多行,則所有引數的縮排與左括號對齊。模板引數也如此。

例如:

#include <vector>
 
std::vector<int, MyAllocator> v;
 
int complex_function(int long_param_name,
                     int& another_param_name);
 
int main(int argc, char* argv[])
{
    if (argc == 2)
    {
        std::cout << argv[0] << '\n';
        std::cout << argv[1] << '\n';
    }
    else
        std::cout << argv[0] << '\n';
}

並非所有這些規則都適用於詳細的特性宣告(那些進入 {{dcl ***}} 模板的),因為需要額外的可讀性。例外包括:

  • 函式模板的 <> 符號與模板引數之間有空格。
  • 類模板的引數分多行排列。
  • 對於函式引數,如果是模板,則 <> 符號與模板引數之間沒有空格。此外,分隔模板引數的逗號後面沒有空格。

例如:

template <

    class TemplateParam,
    class TemplateParam2

> class TemplateClass;
template< class TemplateParam, class TemplateParam2 >

int function_template( MyTemplate<T,Param> my_template_param,

                       int* other_param = nullptr );

[編輯] 另請參見

  • 幫助:模板