命名空间
变体
操作

帮助:模板

出自 cppreference.cn

此页面描述了本 wiki 中使用的模板。

模板提供了实现以下目标的方法

  1. 质量。修改内容从而修复错误变得容易。重复的内容只需编辑一次。
  2. 一致性。模板使正确的做事方式变得自然而然。
  3. 可用性。高级格式化通过模板变得容易。

本 wiki 中有很多模板。所有模板的列表可在 Special:AllPages 找到。由于本 wiki 使用 Mediawiki CMS,因此可以使用 Wikipedia 项目中的所有模板。 此外,模板文档可用于学习 Mediawiki 模板语法。

目录

[[编辑] 列表

列表模板族

  • dsc **** : 用于创建成员变量/函数列表。
  • dcl **** : 用于创建详细声明列表 (包括实际声明代码的列表)。
  • sdsc **** : 用于创建表示语言特性的各种语法的列表。 用于 cpp/language 的子页面中。
  • par **** : 用于创建解释函数参数的列表。
  • spar **** : 用于创建解释语法参数的列表。
  • nv **** : 用于在导航栏中创建特性列表。
  • elink **** : 用于创建外部链接列表。

[[编辑] 排版辅助模板

[[编辑] [{{purge}}]] 文档

这是用于输出特殊符号的模板之一

{{!}} - 输出|

{{!!}} - 输出||

{{=}} - 输出=

{{==}} - 输出==

{{!=}} - 输出|=

{{(!}} - 输出{|

{{!)}} - 输出|}

[[编辑] 格式化

[[编辑] [{{purge}}]] 文档

为封闭文本添加格式

用法 描述 生成的 HTML/MediaWiki 元素  预览 
{{i|文本}} 文本 以斜体普通字体显示 <i>文本</i>{{sep}} 文本 
{{tt|文本}} 文本 以等宽字体显示 <code> 文本
{{ttb|文本}} 文本 以粗体等宽字体显示 <code><b> 文本
{{tti|文本}} 文本 以斜体等宽字体显示 <code><i> 文本
{{normal|文本}} 文本 以普通字体粗细显示 ... font-weight: normal; ... 文本
{{ttn|文本}} 文本 以普通粗细的等宽字体显示 {{normal|<code>文本</code>}} 文本
{{ttni|文本}} 文本 以普通粗细的斜体等宽字体显示 {{normal|<code><i>文本</i></code>}} 文本
{{petty|文本}} 较小的 文本 {{small| 文本
{{small|文本}} 小的 文本 ... font-size: 0.7em;
    line-height: 130%; ...
文本
{{smalltt|文本}} 小的 文本 以等宽字体显示 {{small|<code>文本</code>}} 文本
{{sub|文本}} 下标 文本 以普通字体显示 <sub> 文本
{{sup|文本}} 上标 文本 以普通字体显示 <sup> 文本
{{p|文本}} 文本 在新段落中 <p>文本</p>

文本

[[编辑] 语法高亮

[[编辑] [{{purge}}]] 文档

这些是用于语法高亮的模板。


{{c|代码 |lang=语言 (可选)}}

一个基础模板,旨在高亮内联代码。lang 是可选的;默认使用 {{get lang}} 返回的值。 应用半透明的深色背景。
示例: {{c|std::string(80, '_');}} 结果为 std::string(80, '_');
示例: {{c|1= auto x = std::array{1, 2, 3};}} 结果为 auto x = std::array{1, 2, 3};
请注意,如果表达式中的某处存在等号 =,则 1= 是必要的。
  • 对于范围内的代码片段(例如 [beginend)),首选 {{range}} 模板族。


{{c multi|行1 |行2 (可选)|... |行8 (可选)|lang=语言 (可选)}}

与 {{c}} 类似,支持多行代码片段(最多 8 行)。lang 是可选的;默认使用 {{get lang}} 返回的值。 代码高亮不会跨行:避免拆分字符串字面量 ("") 和多行注释 (/* */)。
示例(注意填充空格): {{c multi|std::max(std::numeric_limits<int>::max(),|         std::numeric_limits<int>::min())}}
或(注意方便的缩进)
{{c multi
|std::max(std::numeric_limits<int>::max(),
|         std::numeric_limits<int>::min())}}
结果为
std::max(std::numeric_limits<int>::max(),
         std::numeric_limits<int>::min())
.
请注意,如果等号 = 出现在对应行的某处,则前导的 |1=/|2=/|3=/.../|8= 是必要的,例如 {{c multi
|1=std::any = 42;
|2=std::any = 3.14;}}
结果为
std::any = 42;
std::any = 3.14;
.


{{cc multi|行1 |行2 (可选)|... |行8 (可选)|lang=语言 (可选)}}

与 {{c multi}} 相同,只是不应用背景(例如边框)。
示例(注意填充空格)
{{cc multi|std::max(std::numeric_limits<int>::max(),|         std::numeric_limits<int>::min())}}
{{cc multi|std::max(std::numeric_limits<int>::max(),|{{nbsp|9}}std::numeric_limits<int>::min())}}
或(注意方便的缩进)
{{cc multi
|std::max(std::numeric_limits<int>::max(),
|         std::numeric_limits<int>::min())}}
结果为
std::max(std::numeric_limits<int>::max(),
         std::numeric_limits<int>::min()).


{{c/core|代码 |lang=语言 (可选)}}

与 {{c}} 相同,只是不应用背景(例如边框)。 旨在在其他模板中使用。
示例: {{c/core|std::puts("C++");}} 结果为 std::puts("C++");


{{co|代码 |lang=语言 (可选)}}

与 {{c/core}} 相同,只是不应用背景(例如边框)。 旨在用于边框由表格框架设置的表格中。
示例: {{co|std::basic_regex<char>}} 结果为 std::basic_regex<char>


{{box|标签 }}

与 {{c}} 类似,将一个共享边框应用于由多个给定标签生成的格式化文本。
示例: {{box|{{lc|std::pair}}{{tt|''<int, char>''()}}}} 结果为 std::pair<int, char>()
示例: {{ltt std|cpp/algorithm/swap}}{{tt|''<int>''}}{{c/core|(x, y);}}}} 结果为 std::swap<int>(x, y);


{{box/core|标签 }}

与 {{box}} 相同,只是不应用背景(例如边框)。
示例
{{box/core|{{c/core|std::common_reference_t<ranges::range_reference_t<R1>,}}<br>{{nbspt|24}}{{c/core|ranges::range_reference_t<R2>>}}}}
结果为
std::common_reference_t<ranges::range_reference_t<R1>,
                        ranges::range_reference_t<R2>>


{{cc|代码 |lang=语言 (可选)}}

一个基础模板,旨在高亮显示大量内联代码。 通常在 {{c}} 模板无法清晰显示代码,但 {{source}} 会浪费太多空间时使用。 lang 是可选的;默认使用 {{get lang}} 返回的值。
示例: {{cc|1= assert(std::hypot(3, 4) == 5);}} 结果为 assert(std::hypot(3, 4) == 5);


{{source|代码 |lang=语言 (可选)}}

一个基础模板,旨在高亮显示大量代码。 lang 是可选的;默认使用 {{get lang}} 返回的值。
例如,代码
 
  {{source|1=
  int main()
  {
      __builtin_printf("Hello, C++\n");
  }
  }}
  
结果为
int main()
{
    __builtin_printf("Hello, C++\n");
}


{{eq fun|代码1 |代码2 (可选)|... |代码4 (可选)|lang=语言 (可选)}}

一个基础模板,用于表示可能的实现部分中的代码片段。 参数 代码1代码2 等是正在描述的函数模板的每个版本的代码(例如,下面示例中的 std::fill 族)。 如果根本没有提供代码,则模板会生成 {{todo}}。 lang 是可选的 — 默认使用 {{get lang}} 返回的值。
例如,代码
 
  {{eq fun
  | 1=
  template<class ForwardIt, class T>
  void fill(ForwardIt first, ForwardIt last, const T& value)
  {
      for (; first != last; ++first)
          *first = value;
  }
  | 2=
  template<class OutputIt, class Size, class T>
  OutputIt fill_n(OutputIt first, Size count, const T& value)
  {
      for (Size i = 0; i < count; i++)
          *first++ = value;
      return first;
  }
  }}

结果为
第一个版本
template<class ForwardIt, class T>
void fill(ForwardIt first, ForwardIt last, const T& value)
{
    for (; first != last; ++first)
        *first = value;
}
第二个版本
template<class OutputIt, class Size, class T>
OutputIt fill_n(OutputIt first, Size count, const T& value)
{
    for (Size i = 0; i < count; i++)
        *first++ = value;
    return first;
}


{{eq impl|代码1 |代码2 (可选)|... |代码4 (可选)|标题1 (可选)|... |标题4 (可选)|lang=语言 (可选)}}

附加参数

{{eq impl|ver1=链接1 |... |ver4=链接4 (可选)}}

与 {{eq fun}} 相同,但增加了两个附加功能
  • 通过可选参数 title1=您的标题, ..., title4=您的标题 来自定义替换任何默认标题。 默认标题与上述模板 {{eq fun}} 的相同,即 第一个版本, ..., 第四个版本
  • 在标题文本“下方”自动生成内部链接。 如果指定了 verN,则此模板将生成一个内部 HTML 链接,目标名称为“版本 num”。 例如,如果 ver2=3 将生成内部链接“#版本 3”。 此功能与 {{dcla}} 和 {{dcl rev multi}} 生成内部锚点一起使用,以将可能的实现代码段链接到概要中的声明。


{{example|描述 (可选)|lang=语言 (可选)|std=语言标准 (可选)|code=要显示的代码 |p=如果非确定性则为 true (可选)|output=示例输出 (可选)}}

一个基础模板,用于表示示例。 如果 code 不存在,则模板会生成 {{todo}}。 lang 默认为 {{get lang}} 返回的值。 output 指定代码显示的输出。 如果输出是非确定性的,则应将 p 设置为 true 以指示这一点(然后显示“可能的输出:”而不是仅仅“输出:”)。
以下语言标准可用
cxx98, cxx03, cxx11, cxx14, c89, c99, c11。
例如,代码
 
  {{example
  | Commenting string
  | code=
  int main()
  {
      __builtin_puts("Hello, C++");
  }
  | p=true
  | output=
  Hello, C++
  }}
  
结果为

注释字符串

int main()
{
    __builtin_puts("Hello, C++");
}

可能的输出

Hello, C++

[[编辑] 链接和锚点

[[编辑] [{{purge}}]] 文档

这些是用于创建 HTML 超链接和 HTML 锚点的模板。

[[编辑] 锚点

{{anchor|1 |2 (可选)|3 (可选)|... (可选)|10 (可选)}} - 创建一个或多个(最多 10 个)HTML 锚点以供引用。

[[编辑] 绝对链接

[[编辑] 普通字体

{{lt|路径 |标题 (可选)}} - 使用绝对路径创建指向页面的链接。 默认标题仅为路径的最后一部分。

示例: {{lt|cpp/language/statements}} 结果为链接: statements
示例: {{lt|cpp/language/statements|Labeled statements}} 结果为链接: Labeled statements
注意:前面的示例只是另一种使用标准模板创建相同链接的方式
[[cpp/language/statements|Labeled statements]],这也产生 Labeled statements

{{ls|路径#节 }} - 创建指向由绝对路径给定的页面上的(锚点)的链接。 文本也用作标题。 要在同一页面上创建链接,路径部分应为空。

示例: {{ls|cpp/language/lambda#Syntax}} 结果为链接: Syntax
要在当前页面内的节/锚点上创建链接,应省略路径部分。
示例: {{ls|#Relative links}} 结果为链接: Relative links (即指向此页面中节的链接)。

{{lsd|路径#节 }} (“lsd”代表 “Link to Section De-capitalized”) - 几乎与 {{ls}} 相同,只是它将显示的节名称的首字母小写。 要在同一页面上创建链接,路径部分应为空。

示例: {{lsd|cpp/language/array#Arrays of unknown bound}} 结果为链接: arrays of unknown bound
示例: {{lsd|#Relative links}} 结果为链接: relative links (即指向此页面中节的链接)。

[[编辑] 等宽字体

{{ltt|路径 |标题 (可选)}} - 使用绝对路径创建指向页面的链接。 默认标题仅为路径的最后一部分。

示例: {{ltt|cpp/language/switch}} 结果为链接: switch
示例: {{ltt|cpp/language/switch|switch(expr)}} 结果为链接: switch(expr)

{{ltf|路径 |标题 (可选)|args=参数 (可选)}} - 使用绝对路径创建指向页面的链接。 默认标题仅为路径的最后一部分。 附加指示函数的括号,其中包含可选的参数

示例: {{ltf|cpp/error/terminate}} 结果为链接: terminate()
示例: {{ltf|cpp/error/terminate|std::terminate}} 结果为链接: std::terminate()
示例: {{ltf|cpp/error/set_terminate|std::set_terminate|args=nullptr}} 结果为链接: std::set_terminate(nullptr)

{{ltp|路径 |标题 (可选)|targs=模板参数 (可选)}} - 使用绝对路径创建指向页面的链接。 默认标题仅为路径的最后一部分。 附加指示模板的尖括号,其中包含可选的模板参数

示例: {{ltp|cpp/container/vector}} 结果为链接: vector<>
示例: {{ltp|cpp/container/vector|targs=int}} 结果为链接: vector<int>
示例: {{ltp|cpp/container/vector|targs=std::size_t}} 结果为链接: vector<std::size_t>

{{ltpf|路径 |标题 (可选)|targs=模板参数 (可选)|args=参数 (可选)}} - 使用绝对路径创建指向页面的链接。 默认标题仅为路径的最后一部分。 附加指示模板的尖括号,其中包含可选的模板参数。 之后,附加指示函数的括号,其中包含可选的参数

示例: {{ltpf|cpp/container/vector/vector|targs=int|args=5}} 结果为链接: vector<int>(5)
示例: {{ltpf|cpp/locale/use_facet|targs=Facet|args=loc}} 结果为链接: use_facet<Facet>(loc)

{{lst|路径#节 }} - 创建指向由绝对路径给定的页面上的(锚点)的链接。 文本也用作标题。 要在同一页面上创建链接,路径部分应为空。

示例: {{lst|cpp/ranges#maybe-const}} 结果为链接: maybe-const
示例: {{lst|#top}} 结果为链接: top
示例: {{lst|#top_}} 结果为链接: top_ (请注意,链接的尾部下划线字符会自动被修剪)

{{l2tt|页面 |标题1 (可选)|标题2 (可选)}} - 使用绝对路径创建指向页面的链接。 标题由路径的最后两个部分组成,并在它们之间插入 ::。 这些部分的每一个都可以被 标题1标题2 覆盖。

示例: {{l2tt|cpp/container/vector/size}} 结果为链接: vector::size
示例: {{l2tt|cpp/container/vector/size|size() const}} 结果为链接: vector::size() const
示例: {{l2tt|cpp/container/vector/size|size()|std::vector<T>}} 结果为链接: std::vector<T>::size()

{{l2tf|页面 |标题1 (可选)|标题2 (可选)|args=参数 (可选)|suffix=后缀 (可选)}} - 使用绝对路径创建指向页面的链接。 标题由路径的最后两个部分组成,并在它们之间插入 ::。 这些部分的每一个都可以被 标题1标题2 覆盖。 附加指示函数的括号,其中包含可选的参数,后跟可选的后缀

示例: {{l2tf|cpp/container/vector/size}} 结果为链接: vector::size()
示例: {{l2tf|cpp/container/vector/size|suffix=const}} 结果为链接: vector::size() const
示例: {{l2tf|cpp/container/vector/size|size|std::vector<T>}} 结果为链接: std::vector<T>::size()

[[编辑] 斜体等宽字体

{{lti|路径 |标题 (可选)}} - 使用绝对路径创建指向页面的链接。 默认标题仅为路径的最后一部分。

示例: {{lti|cpp/concepts/boolean-testable}} 结果为链接: boolean-testable

{{ltpi|path |title (可选)|targs=template arguments (可选)}} - 使用绝对路径创建页面链接。默认标题仅为路径的最后一部分。尖括号表示模板,其中包含可选的模板参数

示例:{{ltpi|cpp/concepts/boolean-testable}} 结果链接为: boolean-testable <>
示例:{{ltpi|cpp/concepts/boolean-testable|targs=int}} 结果链接为: boolean-testable <int>

{{lsi|path#section }} - 链接到由绝对路径给出的页面上的(锚点)。文本也用作标题。要在同一页面上创建链接,路径部分应为空。

示例:{{lsi|cpp/ranges#maybe-const}} 结果链接为: maybe-const
示例:{{lsi|#top}} 结果链接为: top
示例:{{lsi|#top_}} 结果链接为: top_ (请注意,链接末尾的下划线字符会被自动删除)

[编辑] 带有前缀 std:: 的绝对链接

以下便捷模板生成标题以 std:: 开头的链接。它们可以在 {{lc}} 无法生成链接的地方使用。所有链接均以等宽字体显示。

{{ltt std|path }} - 链接到使用绝对路径的页面。标题为 std:: 后跟路径的最后一部分。

示例:{{ltt std|cpp/container/mdspan}} 结果链接为: std::mdspan

{{ltf std|path }} - 链接到使用绝对路径的页面。标题为 std:: 后跟路径的最后一部分和表示函数的括号。

示例:{{ltf std|cpp/io/print}} 结果链接为: std::print()

{{l2tt std|path }} - 链接到使用绝对路径的页面。标题为 std:: 后跟路径的最后两部分,并用 :: 连接。

示例:{{l2tt std|cpp/utility/basic_stacktrace/current}} 结果链接为: std::basic_stacktrace::current

{{l2tf std|path }} - 链接到使用绝对路径的页面。标题为 std:: 后跟路径的最后两部分,并用 :: 连接,以及表示函数的括号。

示例:{{l2tf std|cpp/utility/expected/value}} 结果链接为: std::expected::value()

[编辑] 相对链接

[编辑] 正常字体

{{rl|page |title (可选)}} - 创建一个相对于当前页面的页面链接(即,链接到子页面)。

{{rlp|page |title (可选)}} - 创建一个相对于父页面的页面链接。

{{rlp|/ |title }} - 创建一个指向父页面的链接。

{{rlps|page#section }} - 创建一个指向相对于父页面的页面上的(锚点)的链接。生成的链接标题是节名称。

{{rlpsd|page#Section }} - 创建一个指向相对于父页面的页面上的(锚点)的链接。生成的链接标题是节名称,首字母变为小写。

[编辑] 等宽字体

{{rlt|page |title (可选)}} - 创建一个相对于当前页面的页面链接(即,链接到子页面)。

{{rlpt|page |title (可选)}} - 创建一个相对于父页面的页面链接。

{{rlpt|/ |title }} - 创建一个指向父页面的链接。

{{rlpf|page |title (可选)|args=arguments (可选)}} - 创建一个相对于父页面的页面链接。附加表示函数的括号,其中包含可选的参数

{{rlpst|page#section }} - 创建一个指向相对于父页面的页面上的(锚点)的链接。生成的链接标题是节名称。

{{ttt|identifier }} - 创建一个指向当前页面的链接(通过 #top 链接)。

示例:{{ttt|this_page}} 结果为 this_page

[编辑] 斜体等宽字体

{{rli|page |title (可选)}} - 创建一个相对于当前页面的页面链接(即,链接到子页面)。

{{rlpi|page |title (可选)}} - 创建一个相对于父页面的页面链接。

{{rlpi|/ |title }} - 创建一个指向父页面的链接。

{{rlpsi|page#section }} - 创建一个指向相对于父页面的页面上的(锚点)的链接。生成的链接标题是节名称。

[编辑] 装饰链接

{{attr|attribute |title (可选)|additional title (可选)|lang=language (可选)}}

用于创建指向 C/C++ 语言属性说明符描述的链接。参数:
  • attribute - 属性说明符名称。
  • title - 属性说明符标题。
  • additional title - 标题后的附加元素。
  • language - cppc。如果未提供 language,则使用 {{get lang}}。
示例: {{attr|assume}} 结果为 [[assume]]
示例: {{attr|noreturn|_Noreturn|lang=c}} 结果为 [[_Noreturn]]
示例: {{attr|deprecated|3=("because")}} 结果为 [[deprecated("because")]]

[编辑] 标准化链接和信息

[编辑] [{{purge}}] 文档

[编辑] WG21

生成指向 C++ 工作组 (WG21) 文档的链接,即 CWG/LWG 页面或“提案”文件。

{{wg21|CWG 或 LWG 或 WG21 文档编号 |full (可选)}}

full (可选) 参数仅适用于“提案”文档,应用后会生成指向 GitHub 页面的附加链接(提案在 GitHub 页面上由 WG21 处理)。

[编辑] stddoc

用于生成指向 WG14/WG21 文档的链接。

WG/语言(C 或 C++)由 {{get lang}} 确定,除非提供带有值 ccpplang (可选) 参数(如果支持)。

{{stddoc|文档编号 |链接标题 (可选)|lang=lang (可选)}}

生成指向具有给定文档编号的 WG14/WG21 文档的链接。可以提供自定义的链接标题,默认情况下为大写的文档编号。在 C 模式下,文档编号可以包含文件扩展名,例如 n2081.htm。在 C++ 模式下,由于 wg21.link 服务的自动化,无需知道/传递扩展名。
  • 示例: {{stddoc|p2443r1}} 结果为: P2443R1
  • 示例: {{stddoc|P2443R1|views::chunk_by}} 结果为: views::chunk_by
  • 示例: {{stddoc|n2731|C23 draft|lang=c}} 结果为: C23 draft
  • 示例: {{stddoc|n2081.htm|n2081|lang=c}} 结果为: n2081

{{stddoc latest draft|链接标题 (可选)|lang=lang (可选)}}

生成指向下一个 C/C++ 标准最新草案的链接。
  • 目前, {{stddoc latest draft}} 结果为: N5001
  • 目前, {{stddoc latest draft|Latest C++ draft}} 结果为: Latest C++ draft
  • 目前, {{stddoc latest draft|Latest C draft|lang=c}} 结果为: Latest C draft

[编辑] stddocs

{{stddocs|文档列表 |input-separator=space (可选)|output-separator=line-break (可选)}}

  • 一个便捷模板,用于通过将输入列表的每个元素包装到 {{stddoc}} 模板中来生成 WG14/WG21 文档链接列表。
  • docs-list — 第 1 个位置参数,输入文档列表。如果未提供第二个参数,则输入列表的元素必须用空格分隔,例如 {{stddocs|P0202R3 P0879R0 LWG3256 LWG3792}}。如果未提供第三个参数,则输出链接以 <br> 分隔。
  • input-separator — 第 2 个位置参数。如果提供,则定义输入列表分隔符。
  • output-separator — 第 3 个位置参数。如果提供,则定义输出列表分隔符。
  • 限制:最多支持输入列表中的 8 个元素。
  • 示例: {{stddocs|P0202R3 P0879R0 LWG3256 LWG3792}} 结果为
P0202R3
P0879R0
LWG3256
LWG3792
  • 示例: {{stddocs|P0202R3, P0879R0, LWG3256, LWG3792|,}} 结果为
P0202R3
P0879R0
LWG3256
LWG3792
  • 示例: {{stddocs|P0202R3/P0879R0/LWG3256/LWG3792|/|—}} 结果为
P0202R3P0879R0LWG3256LWG3792

[编辑] stdinfo

用于提供 C/C++ 标准化信息。

语言(C 或 C++)由 {{get lang}} 确定,除非提供带有值 ccpplang (可选) 参数(如果支持)。

{{stdinfo latest draft|rev 或 doc 或 date |lang=lang (可选)}}

是 C/C++ 标准草案信息的中心。根据第一个参数的,返回的信息
信息 示例
rev 版本号 {{stdinfo latest draft|rev}} 结果为 26

{{stdinfo latest draft|rev|lang=c}} 结果为 2y

doc 文档编号 {{stdinfo latest draft|doc}} 结果为 n5001

{{stdinfo latest draft|doc|lang=c}} 结果为 n3467

date 文档日期 {{stdinfo latest draft|date}} 结果为 2024-12-17

{{stdinfo latest draft|date|lang=c}} 结果为 2025-02-09

在以下更高级别的模板中使用
{{stdinfo latest draft docnum}}、{{stdinfo latest draft docdate}}、{{stdinfo next version number}}、{{stdinfo next version}}。

{{stdinfo latest draft docnum|lang=lang (可选)}}

C/C++ 标准最新草案的文档编号。
  • 对于 C,结果为 n3467。
  • 对于 C++,结果为 n5001。

{{stdinfo latest draft docdate|lang=lang (可选)}}

C/C++ 标准最新草案的文档日期。
  • 对于 C,结果为 2025-02-09。
  • 对于 C++,结果为 2024-12-17。

{{stdinfo next version number|lang=lang (可选)}}

下一个 C/C++ 标准的版本号。
  • 对于 C,结果为 2y。
  • 对于 C++,结果为 26。

{{stdinfo next version}}

下一个 C/C++ 标准的版本(带有前缀 C 或 C++)。结果为: C++

{{stdinfo current version number}}

当前 C/C++ 标准的版本号。结果为: 20

{{stdinfo current version}}

当前 C/C++ 标准的版本(带有前缀 C 或 C++)。结果为: C++20

[编辑] 当前语言

返回默认用于页面的编程语言。输出值取决于包含此模板的页面的标题。

{{get lang}}

如果页面标题以 "c/" 开头,则输出值为 "c";如果页面标题以 "cpp/" 开头,则输出值为 "cpp"。否则,输出值为 "cpp"。

{{get lang formal}}

如果页面标题以 "c/" 开头,则输出值为 "C";如果页面标题以 "cpp/" 开头,则输出值为 "C++"。否则,输出值为 "C++"。

[编辑] POSIX

{{posix|page (可选)|mono-title (可选)|any-title (可选)}}

生成指向 POSIX 函数文档页面的链接。此模板内部使用 {{posix/core}} (见下文)。
  • 如果未提供任何参数,则生成指向文档根目录的链接,标题为 POSIX 版本。
  • page - 页面名称,不带 .html 扩展名(将自动附加)。如果未提供其他参数,它也用作等宽字体的标题。
  • mono-text - 如果提供,将用作等宽字体的标题。
  • any-title - 如果提供,将按原样用作标题。此参数的优先级高于 mono-text,即,如果提供,则忽略 mono-text
[编辑] 示例

{{posix/core|link-part-and-title (可选)}}

如果提供了链接的“稳定”部分,则生成指向 POSIX 文档页面的链接。
每当 POSIX 版本和文档页面的根链接更改时,都应更新此模板。
  • 如果未提供参数,则生成指向文档根目录的链接,标题为 POSIX 版本,即 {{posix/core}} 结果为 POSIX.1-2024/IEEE Std 1003.1-2024
  • 否则,参数应为“稳定”部分,后跟标题,例如:
{{posix/core|basedefs/V1_chap04.html#tag_04_16 the Epoch}} 结果为 the Epoch

[编辑] 注解

[编辑] {{mark}} 模板族

[编辑] [{{purge}}] 文档

创建注解。

通用

{{mark|text |class=classes (可选)}} - 创建包含给定 text 的注解,可以提供额外的 classes 用于样式设置。

示例: {{mark|text}} 结果为 (text)

{{mark rev|text |class=classes (可选)}} - 创建包含给定 text 的注解,可以提供额外的 classes 用于样式设置。

示例: {{mark rev|since C++1998}} 结果为 (since C++1998)

{{mark tooltip|text |tooltip |class=classes (可选)}} - 创建包含给定 texttooltip 的注解,可以提供额外的 classes 用于样式设置。

示例: {{mark tooltip|99% complete|XXX not supported}} 结果为 (99% complete*)
杂项
模板 注解
{{mark attribute}} (属性说明符)
{{mark deprecated}} (已弃用)
{{mark optional}} (可选)
{{mark cond present}} (有条件地存在)
{{mark implicit}} (隐式声明)
{{mark concept}} (概念)
{{mark expos}} (仅为解释目的*)
{{mark expos concept}} (仅为解释目的概念*)
{{mark tag}} (标签)
{{mark expos mem type}} (仅为解释目的成员类型*)
{{mark named req}} (命名要求)
{{mark typedef}} (typedef)
{{mark type alias}} (类型别名)
{{mark enum}} (枚举)
{{mark mem enum}} (公共成员枚举)
{{mark keyword}} (关键字)
{{mark macro keyword}} (关键字宏)
{{mark preprocessing directive}} (预处理指令)
{{mark macro opr}} (运算符宏)
{{mark language}} (语言)
C++ 标准
模板 注解
{{mark deprecated c++98}} (在 C++98 中已弃用)
{{mark c++03}} (C++03)
{{mark since c++03}} (自 C++03 起)
{{mark until c++03}} (截至 C++03)
{{mark c++11}} (C++11)
{{mark since c++11}} (自 C++11 起)
{{mark constexpr since c++11}} (constexpr 自 C++11 起)
{{mark noexcept since c++11}} (noexcept 自 C++11 起)
{{mark deprecated c++11}} (在 C++11 中已弃用)
{{mark until c++11}} (截至 C++11)
{{mark c++14}} (C++14)
{{mark since c++14}} (自 C++14 起)
{{mark constexpr since c++14}} (constexpr 自 C++14 起)
{{mark noexcept since c++14}} (noexcept 自 C++14 起)
{{mark deprecated c++14}} (在 C++14 中已弃用)
{{mark until c++14}} (截至 C++14)
{{mark c++17}} (C++17)
{{mark since c++17}} (自 C++17 起)
{{mark constexpr since c++17}} (constexpr 自 C++17 起)
{{mark noexcept since c++17}} (noexcept 自 C++17 起)
{{mark deprecated c++17}} (在 C++17 中已弃用)
{{mark until c++17}} (截至 C++17)
{{mark c++20}} (C++20)
{{mark since c++20}} (自 C++20 起)
{{mark constexpr since c++20}} (constexpr 自 C++20 起)
{{mark noexcept since c++20}} (noexcept 自 C++20 起)
{{mark deprecated c++20}} (在 C++20 中已弃用)
{{mark until c++20}} (截至 C++20)
{{mark c++23}} (C++23)
{{mark since c++23}} (自 C++23 起)
{{mark constexpr since c++23}} (constexpr 自 C++23 起)
{{mark noexcept since c++23}} (noexcept 自 C++23 起)
{{mark deprecated c++23}} (在 C++23 中已弃用)
{{mark updated c++23}} (在 C++23 中已更新)
{{mark until c++23}} (截至 C++23)
{{mark c++26}} (C++26)
{{mark since c++26}} (自 C++26 起)
{{mark constexpr since c++26}} (constexpr 自 C++26 起)
{{mark noexcept since c++26}} (noexcept 自 C++26 起)
{{mark deprecated c++26}} (在 C++26 中已弃用)
{{mark updated c++26}} (在 C++26 中已更新)
{{mark until c++26}} (直到 C++26)
C 标准
模板 注解
{{mark c95}} (C95)
{{mark since c95}} (自 C++95 起)
{{mark until c95}} (直到 C++95)
{{mark c99}} (C99)
{{mark since c99}} (自 C++99 起)
{{mark until c99}} (直到 C++99)
{{mark c11}} (C++11)
{{mark since c11}} (自 C++11 起)
{{mark until c11}} (直到 C++11)
{{mark c17}} (C++17)
{{mark since c17}} (自 C++17 起)
{{mark deprecated c17}} (C++17 中已弃用)
{{mark until c17}} (直到 C++17)
{{mark c23}} (C++23)
{{mark since c23}} (自 C++23 起)
{{mark deprecated c23}} (C++23 中已弃用)
{{mark until c23}} (直到 C++23)
{{mark since none}} (自 {std} 起)
{{mark until none}} (直到 {std})
组合

{{mark life|appear=c++xx (可选)|since=c++xx (可选)|deprecated=c++xx (可选)|until=c++xx (可选)|removed=c++xx (可选)|br=yes (可选)}}

示例:{{mark life|since=c++11|deprecated=c++17|removed=c++20}} 结果为
(自 C++11 起)(C++17 中已弃用)(C++20 中已移除)
示例:{{mark life|appear=c++11|until=c++20}} 结果为 (C++11)(直到 C++20)
  • 可选参数 br 可以设置为 yes 以在单独的行中显示每个注释,例如
示例:{{mark life|since=c++11|deprecated=c++17|removed=c++20|br=yes}} 结果为
(自 C++11 起)
(在 C++17 中已弃用)
(C++20 中已移除)


技术规范
模板 注解
{{mark since libfund ts}} (库基础 TS)
{{mark since libfund ts 2}} (库基础 TS v2)
{{mark since libfund ts 3}} (库基础 TS v3)
{{mark since fs ts}} (文件系统 TS)
{{mark since parallelism ts}} (并行 TS)
{{mark since parallelism ts 2}} (并行 TS v2)
{{mark since concepts ts}} (概念 TS)
{{mark since concurrency ts}} (并发 TS)
{{mark since concurrency ts 2}} (并发 TS v2)
{{mark since tm ts}} (TM TS)
{{mark since special functions tr}} (特殊函数 TR)
{{mark since modules ts}} (模块 TS)
{{mark since coro ts}} (协程 TS)
{{mark since reflection ts}} (反射 TS)
函数
模板 注解
{{mark fun}} (函数)
{{mark expos fun}} (仅用于演示的函数*)
{{mark tfun}} (函数模板)
{{mark expos tfun}} (仅用于演示的函数模板*)
{{mark mem fun}} (公共成员函数)
{{mark mem sfun}} (公共静态成员函数)
{{mark mem vfun}} (虚公共成员函数)
{{mark priv mem fun}} (私有成员函数)
{{mark prot mem fun}} (受保护的成员函数)
{{mark prot mem vfun}} (虚受保护的成员函数)
{{mark expos mem fun}} (仅用于演示的成员函数*)
{{mark expos mem sfun}} (仅用于演示的静态成员函数*)
{{mark macro fun}} (函数宏)
{{mark macro tfun}} (类型通用函数宏)
模板 注解
{{mark class}} (类)
{{mark tclass}} (类模板)
{{mark talias}} (别名模板)
{{mark ptclass}} (类模板特化)
{{mark mem class}} (公共成员类)
{{mark priv mem class}} (私有成员类)
{{mark prot mem class}} (受保护的成员类)
{{mark mem tclass}} (公共成员类模板)
{{mark priv mem tclass}} (私有成员类模板)
{{mark expos mem class}} (仅用于演示的成员类*)
{{mark expos mem tclass}} (仅用于演示的成员类模板*)
{{mark priv ntclass}} (私有嵌套类模板)
常量
模板 注解
{{mark macro const}} (宏常量)
{{mark const}} (常量)
{{mark mem const}} (公共成员常量)
{{mark mem sconst}} (公共静态成员常量)
{{mark expos mem sconst}} (仅用于演示的静态成员常量*)
对象
模板 注解
{{mark mem obj}} (公共成员对象)
{{mark priv mem obj}} (私有成员对象)
{{mark prot mem obj}} (受保护的成员对象)
{{mark expos mem obj}} (仅用于演示的成员对象*)
{{mark expos mem var}} (仅用于演示的变体成员对象*)
{{mark custpt}} (自定义点对象)
{{mark rao}} (范围适配器对象)
{{mark niebloid}} (算法函数对象)


容器标记支持

{{cpp/container/mark std|container}} - 根据给定标准容器 container 的修订版本,输出 (C++11)(C++20)(C++23) 等。 对于 C++11 之前的容器,输出为空。

[编辑] 示例
  • {{cpp/container/mark std|vector}} 结果为(无)
  • {{cpp/container/mark std|array}} 结果为 (C++11)
  • {{cpp/container/mark std|unordered_set}} 结果为 (C++11)
  • {{cpp/container/mark std|span}} 结果为 (C++20)
  • {{cpp/container/mark std|flat_set}} 结果为 (C++23)

[编辑] {{cmark}} 模板族

[编辑] [{{purge}}] 文档

为函数创建注释。 已经定义了几个注释

{{cmark virtual}} 结果为 [virtual]

{{cmark static}} 结果为 [static]

{{cmark deleted}} 结果为 [deleted]

[编辑] 版本控制

[编辑] [{{purge}}] 文档

用于声明描述的特定部分仅对标准的特定版本有效。

{{rev begin|noborder=true_if_noborder (可选)}}

开始设置特定于标准特定版本的一组文本片段。如果 `noborder` 参数为 *true*,则表格将以无边框且尽可能少的内边距显示。

{{rev|since=since-std (可选)|until=until-std (可选)|text }}

指定 *text* 仅对从 *since-std* 到 *until-std* 的标准版本有效(*until-std* 不包含在内)。

{{rev end}}

结束设置特定于标准特定版本的一组文本片段。

{{rrev|noborder=true_if_noborder (可选)|since=since-std (可选)|until=until-std (可选)|text }}

{{rev begin}}/{{rev}}/{{rev end}} 的组合,用于仅需要单个 {{rev}} 的情况。

{{rrev multi|noborder=true_if_noborder (可选)|sinceX=since-std (可选)|untilX=until-std (可选)|revX=text |... }}

{{rev begin}}/{{rev}}/{{rev end}} 的组合。最多支持 7 个片段。sinceX 的默认值为 untilX-1untilX 的默认值为 sinceX+1。因此,当代码片段相对较短且修订范围连续时,它最有用。此模板可以被替换。

{{rev inl|id=id (可选)|since=since-std (可选)|until=until-std (可选)|noborder=true_if_noborder (可选)|text }}

与 {{rev}} 相同,只是以内联方式显示。不得使用 {{rev begin}} 和 {{rev end}}。可以使用 *id* 引用文本。

如果 `noborder` 参数为 *true*,则省略边框。

[编辑] 特性测试宏渲染

[编辑] [{{purge}}] 文档

[编辑] 特性测试宏支持

用于生成链接和表格,描述给定的特性测试宏。

[编辑] 单行形式

{{feature test macro|feature-test-macro-name |feature |value=date |std=C++XY |dr=yes or NN (可选)}}

示例

{{feature test macro|__cpp_lib_string_view|{{lc|std::string_view}}|value=201606L|std=C++17}}
结果为
特性测试 标准 特性
__cpp_lib_string_view 201606L (C++17) std::string_view

示例

{{feature test macro|__cpp_inheriting_constructors|重述|value=201511L|std=C++11|dr=98}}
结果为
特性测试 宏 标准 特性
__cpp_inheriting_constructors 201511L (C++11)
(DR98)
重述

[编辑] 多行形式

如果页面上有多个特性测试宏,则应使用以下模板将它们组合在一个表格中

{{ftm begin|params (可选)}}

{{ftm|params }}

...

{{ftm end}}

[编辑] 语法

{{ftm begin|core=yes (可选)|sort=yes (可选)}}

确定表格的属性。

  • 如果提供了名为 core 的参数,则不会生成指向 库特性页面 的链接(在表格标题中)。
  • 如果提供了名为 sort 的参数,则该表格将是一个“可排序”的 wiki 表格。

注意:以前,支持两个额外的(可选)参数:stdcomment(现在都已忽略),用于有条件地添加/隐藏列。StdValueFeature 列*始终存在*。


{{ftm|cpp-macro |feature |value=value |std=C++XX |rowspan=R (可选)|dr=yes or XZ (可选)}}

  • cpp-macro 提供特性测试宏名称,例如 __cpp_lib_constexpr
  • feature 提供特性描述
  • value 提供特性测试值(日期),例如 202202L
  • std 提供修订字符串,例如 (C++23)
  • rowspan 是一个可选参数(例如,`rowspan="3"`),其含义与标准 wiki 表格中的含义相同,即,如果提供,它会导致将 `R` 个相邻单元格(在 **特性测试宏** 列中)垂直合并为一个,并在其中呈现单个特性测试宏名称。以下 R - 1 个 {{ftm}} 应该使用 - 字符而不是宏名称。
  • dr,如果参数为 "yes",则在 C++ 修订版本下方添加 (DR) 标记。
  • dr,如果提供的参数不是 "yes",例如修订号 98,则在 C++ 修订版本下方添加 (DR98) 标记。

[编辑] 示例

序列

{{ftm begin|sort=yes}}
{{ftm|std=C++23|value=202207L|__cpp_lib_find_last|comment #1}}
{{ftm|std=C++23|value=202207L|__cpp_lib_fold|comment #2}}
{{ftm|std=C++20|value=201911L|__cpp_lib_ranges|rowspan="4"|comment #3}}
{{ftm|std=C++20|value=202106L|-|comment #4}}
{{ftm|std=C++20|value=202110L|-|comment #5|dr=yes}}
{{ftm|std=C++23|value=202202L|-|comment #6|dr=20}}
{{ftm|std=C++23|value=202207L|__cpp_lib_ranges_contains|comment #7}}
{{ftm|std=C++23|value=202202L|__cpp_lib_ranges_iota|comment #8}}
{{ftm|std=C++23|value=202106L|__cpp_lib_ranges_starts_ends_with|comment #9}}
{{ftm|std=C++20|value=201806L|__cpp_lib_shift|rowspan="2"|comment #10}}
{{ftm|std=C++23|value=202202L|-|comment #11}}
{{ftm end}}

结果为

特性测试 标准 特性
__cpp_lib_find_last 202207L (C++23) 注释 #1
__cpp_lib_fold 202207L (C++23) 注释 #2
__cpp_lib_ranges 201911L (C++20) 注释 #3
202106L (C++20) 注释 #4
202110L (C++20)
(DR)
注释 #5
202202L (C++23)
(DR20)
注释 #6
__cpp_lib_ranges_contains 202207L (C++23) 注释 #7
__cpp_lib_ranges_iota 202202L (C++23) 注释 #8
__cpp_lib_ranges_starts_ends_with 202106L (C++23) 注释 #9
__cpp_lib_shift 201806L (C++20) 注释 #10
202202L (C++23) 注释 #11

[编辑] 内联形式

{{ftm link|feature-test-macro-name }}

生成指向 cpp/feature test 表格的简单链接。

  • feature-test-macro-name - FTM 名称,例如 __cpp_constexpr__cpp_lib_ratio

示例


{{ftml|feature-test-macro-name |since-rev (可选)|updated-in-rev-list (可选)}}

生成带有修订标记的简单链接,旨在用于诸如 宏符号索引 等页面。

  • feature-test-macro-name - FTM 名称,例如 __cpp_constexpr__cpp_lib_ratio
  • since-rev - C++ 修订版本,格式为 C++20
  • update-in-rev-list - 发生更新的修订版本列表,格式为 C++17, C++20

[编辑] 示例

  • {{ftml|__cpp_constexpr}} 结果为 __cpp_constexpr
  • {{ftml|__cpp_constexpr|C++11}} 结果为 __cpp_constexpr (自 C++11 起)
  • {{ftml|__cpp_lib_format|C++20|C++23}} 结果为 __cpp_lib_format (自 C++20 起)(C++23 中更新)
  • {{ftml|__cpp_lib_format|C++20|C++23, C++26}} 结果为 __cpp_lib_format (自 C++20 起)(C++23, C++26 中更新)

[编辑] 导航栏

[编辑] [{{purge}}] 文档
{{navbar
| style =

| heading1 = 
| content1 = 

| heading2 = 
| content2 = 

| heading3 = 
| content3 = 

...

| heading8 = 
| content8 = 

}}

[编辑] 杂项

[编辑] 空格

[编辑] [{{purge}}] 文档

[编辑] 处理空格字符

{{space|number}} - 输出 number 个空格字符。请注意,与 {{nbsp}}/{{nbspt}} 系列的“空格”不同,前导/尾随位置的这些空格字符可以通过 {{trim}} 修剪。

{{space as|text}} - 输出与 text 中字符数一样多的空格字符。对于模板化代码的缩进很有用。

{{trim|text}} - 修剪前导和尾随空格

{{sep}} - 在字符之间插入一个微小的不间断空格,以避免例如斜体字符的重叠。示例:II 与 I I。

{{nbsp|number (可选)}} - 插入 number 个不间断空格字符 (HTML: &nbsp;)。如果没有参数,则插入一个这样的空格。这些“空格”(在前导/尾随位置)不会被 {{trim}} 修剪。

{{nbspt|number (可选)}} - 与 {{nbsp}} 相同的空格字符生成器,但在 monospace (teletype) 字体中。这些“空格”不会被 {{trim}} 修剪。

{{void}} - 就像插入一个空空格一样,这在 wiki 媒体处理器应该起作用时可能需要阻止 HTML 生成。一个例子是 foo<Ref>,其中 <Ref> 部分会触发 HTML 引擎生成引用列表。为了抑制这种情况,此代码可以写成 {{c|foo<{{void}}Ref>}}

{{br}} - 行为类似于 <br> HTML 标签,不同之处在于,只有当字符串不适合作为封闭框中的一行时才会发生换行。在表格中可选地拆分长标识符时很有用。

示例。让标识符 __cpp_lib_allocator_traits_is_always_equal 被标记为

{{tt|__cpp_lib_allocator_}}{{br}}{{tt|traits_is_always_equal}}.

然后,包含它的框的渲染可能会导致

__cpp_lib_allocator_traits_is_always_equal
__cpp_lib_allocator_traits_is_always_equal

[编辑] 标头

[编辑] [{{purge}}] 文档

用于创建指向 C 或 C++ 头文件描述页面的链接。

{{header|name|lang=cppc (可选)}},其中 name 是头文件名(不带尖括号)。

在 C++ 页面上 {{header|iostream}} 结果为 <iostream>
在 C 页面上 {{header|stdio.h}} 结果为 <stdio.h>

[[编辑] 实用工具模板(旨在仅供其他模板使用)

[[编辑] 类型转换要求

[[编辑] [{{purge}}] 文档

这是用于指定某种类型必须可转换为另一种类型的模板之一。所有这些模板都可以发出以下任一要求:必须可以将特定类型的对象转换为另一种类型,或者必须可以解引用特定类型的对象,然后将其转换为另一种类型。此行为取决于提供的参数(t 表示普通类型,p 表示必须首先解引用的类型)。

{{cast rreq| base_type| rt=type rp=pointer_type}} - base_type 必须可转换为 rt*rp

{{cast req1| base_type| t1=type p1=pointer_type}} - t1*p1 必须可转换为 base_type

{{cast req2| base_type1| base_type2| t1=type p1=pointer_type| t2=type p2=pointer_type (可选)}} - t1*p1 必须可转换为 base_type1,或者 t2*p2 必须可转换为 base_type2。如果未提供 t2p2,则假定 t1*p1 必须可转换为 base_type1base_type2

[[编辑] 标准容器分类

[[编辑] [{{purge}}] 文档

这是一组用于分类容器的模板之一。

通用形式为

{{cpp/container/TERM|container|if-true|if-false (可选)}}:

  • 如果 container 是给定容器/适配器组中的一个,则结果为 if-true
  • 否则,结果为 if-false(如果存在)。
TERM 组中的容器/适配器
if seq
  • array, inplace_vector, vector, hive, deque, list, forward_list
if assoc
  • set, multiset, map, multimap
  • unordered_set, unordered_multiset, unordered_map, unordered_multimap
  • flat_set, flat_multiset, flat_map, flat_multimap
if ord
  • set, multiset, map, multimap
  • flat_set, flat_multiset, flat_map, flat_multimap
if unord
  • unordered_set, unordered_multiset, unordered_map, unordered_multimap
if uniq
  • set, map
  • unordered_set, unordered_map
  • flat_set, flat_map
if eq
  • multiset, multimap
  • unordered_multiset, unordered_multimap
  • flat_multiset, flat_multimap
if set
  • set, multiset
  • unordered_set, unordered_multiset
  • flat_set, flat_multiset
if map
  • map, multimap
  • unordered_map, unordered_multimap
  • flat_map, flat_multimap
if ad
  • stack, queue, priority_queue
  • flat_set, flat_multiset, flat_map, flat_multimap
if flat
  • flat_set, flat_multiset, flat_map, flat_multimap
if c++98
  • vector, list, set, multiset, map, multimap
  • stack, queue, priority_queue
if c++11
  • array, forward_list
  • unordered_set, unordered_multiset, unordered_map, unordered_multimap
  • span
  • flat_set, flat_multiset, flat_map, flat_multimap
  • inplace_vector
  • hive

[[编辑] 示例

{{cpp/container/if set|multiset|Yes|No}} 结果为 Yes。

{{cpp/container/if seq|multiset|Yes|No}} 结果为 No。