296 lines
28 KiB
HTML
296 lines
28 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>直接初始化</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_direct_initialization skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">直接初始化</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-language.html">language</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>从明确的构造函数实参的集合初始化对象。</p>
|
|
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">语法</span></h3>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">T</span> <span class="t-spar">对象</span> <code><b>(</b></code> <span class="t-spar">实参</span> <code><b>);</b></code>
|
|
<p><span class="t-spar">T</span> <span class="t-spar">对象</span> <code><b>(</b></code> <span class="t-spar">实参1, 实参2, ...</span> <code><b>);</b></code></p>
|
|
</td>
|
|
<td>(1)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">T</span> <span class="t-spar">对象</span> <code><b>{</b></code> <span class="t-spar">实参</span> <code><b>};</b></code></td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">T</span> <code><b>(</b></code> <span class="t-spar">其他对象</span> <code><b>)</b></code>
|
|
<p><span class="t-spar">T</span> <code><b>(</b></code> <span class="t-spar">实参1, 实参2, ...</span> <code><b>)</b></code></p>
|
|
</td>
|
|
<td>(3)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>static_cast<</b></code> <span class="t-spar">T</span> <code><b>>(</b></code> <span class="t-spar">其他对象</span> <code><b>)</b></code></td>
|
|
<td>(4)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>new</b></code> <span class="t-spar">T</span><code><b>(</b></code><span class="t-spar">实参列表, ...</span><code><b>)</b></code></td>
|
|
<td>(5)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">类</span><code><b>::</b></code><span class="t-spar">类</span><code><b>()</b></code> <code><b>:</b></code> <span class="t-spar">成员</span><code><b>(</b></code><span class="t-spar">实参列表, ...</span><code><b>)</b></code> <code><b>{</b></code> <span class="t-spar">...</span> <code><b>}</b></code></td>
|
|
<td>(6)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>[</b></code><span class="t-spar">实参</span><code><b>](){</b></code> <span class="t-spar">...</span> <code><b>}</b></code></td>
|
|
<td>(7)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">解释</span></h3>
|
|
<p>在下列场合进行直接初始化:</p>
|
|
<div class="t-li1"><span class="t-li">1)</span> 以表达式<span class="t-rev-inl t-since-cxx11"><span>或花括号初始化器列表</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></span></span>的非空带括号列表初始化</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> 以花括号环绕的单个初始化器初始化一个非类类型对象(注意:对于类类型和其他使用花括号初始化器列表的初始化,见<a href="cpp-language-list_initialization.html">列表初始化</a>)</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> 用<a href="cpp-language-explicit_cast.html">函数式转型</a>或以带括号的表达式列表初始化<span class="t-rev-inl t-until-cxx17"><span>纯右值临时量</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></span></span><span class="t-rev-inl t-since-cxx17"><span>纯右值的结果对象</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 起)</span></span></span></div>
|
|
<div class="t-li1"><span class="t-li">4)</span> 用 <a href="cpp-language-static_cast.html">static_cast</a> 表达式初始化<span class="t-rev-inl t-until-cxx17"><span>纯右值临时量</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></span></span><span class="t-rev-inl t-since-cxx17"><span>纯右值的结果对象</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 起)</span></span></span></div>
|
|
<div class="t-li1"><span class="t-li">5)</span> 用带有非空初始化器的 new 表达式初始化具有动态存储期的对象</div>
|
|
<div class="t-li1"><span class="t-li">6)</span> 用构造函数<a href="cpp-language-initializer_list.html" class="mw-redirect">初始化器列表</a>初始化基类或非静态成员</div>
|
|
<div class="t-li1"><span class="t-li">7)</span> 在 lambda 表达式中从按复制捕获的变量初始化闭包对象的成员</div>
|
|
<p>直接初始化的效果是:</p>
|
|
<ul>
|
|
<li>如果 <code>T</code> 是数组类型,那么</li>
|
|
</ul>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-until-cxx20">
|
|
<td>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>程序非良构</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</td>
|
|
<td><span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
|
</tr>
|
|
<tr class="t-rev t-since-cxx20">
|
|
<td>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>按<a href="cpp-language-aggregate_initialization.html">聚合初始化</a>初始化数组,但允许窄化转换,并<a href="cpp-language-value_initialization.html">值初始化</a>任何不带初始化器的元素。</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">struct</span> A <span class="br0">{</span> <span class="kw1">explicit</span> A<span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
A a<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="br0">(</span>A<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK:以 A(1) 初始化 a[0] 并以 A() 初始化 a[1]</span>
|
|
A b<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="br0">{</span>A<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// 错误:从 {} 隐式复制初始化 b[1] 选择了 explicit 构造函数</span></pre></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<ul>
|
|
<li>如果 <code>T</code> 是类类型,</li>
|
|
</ul>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx17">
|
|
<td>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>如果初始化器是<a href="cpp-language-value_category.html">纯右值</a>表达式且类型与 <code>T</code> 为相同的类(忽略 cv 限定),则用初始化器表达式自身,而非从它实质化的临时量,初始化目标对象:<br />
|
|
( C++17 前,编译器可以在此情况下消除源自纯右值的构造,但适合的构造函数仍必须可访问:参阅<a href="cpp-language-copy_elision.html">复制消除</a>)</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>检验 <code>T</code> 的构造函数并由重载决议选取最佳匹配。然后调用该构造函数初始化对象。</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx20">
|
|
<td>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>否则,如果目标类型是(可能有 cv 限定)的聚合类,则按<a href="cpp-language-aggregate_initialization.html">聚合初始化</a>中所述进行初始化,但允许窄化转换,不允许指派初始化器,不延长引用所绑定到的临时量的生存期,不进行花括号消除,并<a href="cpp-language-value_initialization.html">值初始化</a>任何无初始化器的元素。</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">struct</span> B <span class="br0">{</span>
|
|
<span class="kw4">int</span> a<span class="sy4">;</span>
|
|
<span class="kw4">int</span><span class="sy3">&&</span> r<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">int</span> f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">10</span><span class="sy4">;</span>
|
|
|
|
B b1<span class="br0">{</span><span class="nu0">1</span>, f<span class="br0">(</span><span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK:延长生存期</span>
|
|
B b2<span class="br0">(</span><span class="nu0">1</span>, f<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 良构,但有悬垂引用</span>
|
|
B b3<span class="br0">{</span><span class="nu16">1.0</span>, <span class="nu0">1</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// 错误:窄化转换</span>
|
|
B b4<span class="br0">(</span><span class="nu16">1.0</span>, <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 良构,但有悬垂引用</span>
|
|
B b5<span class="br0">(</span><span class="nu16">1.0</span>, std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>n<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span></pre></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<ul>
|
|
<li>否则,如果 <code>T</code> 是非类类型但源类型是类类型,则检验源类型及其各基类的转换函数,并由重载决议选取最佳匹配。然后用选取的用户定义转换,转换初始化器表达式为所初始化的对象。</li>
|
|
<li>否则,如果 <code>T</code> 是 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> 而原类型是 <span class="t-lc"><a href="cpp-types-nullptr_t.html">std::nullptr_t</a></span>,则被初始化对象的值为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span>。</li>
|
|
<li>否则,在必要时使用<a href="cpp-language-implicit_conversion.html">标准转换</a>,转换 <span class="t-spar">其他对象</span> 的值为 <code>T</code> 的无 cv 限定版本,而所初始化的对象的初值为(可能为转换后的)该值。</li>
|
|
</ul>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>直接初始比复制初始化更宽松:复制初始化仅考虑非 <a href="cpp-language-explicit.html">explicit</a> 构造函数和非 explicit 的用户定义<a href="cpp-language-cast_operator.html">转换函数</a>,而直接初始化考虑所有构造函数和所有用户定义转换函数。</p>
|
|
<p>在使用直接初始化语法 <span class="t-v">(1)</span>(带圆括号)的变量声明和<a href="cpp-language-function.html">函数声明</a>之间有歧义的情况下,编译器始终选择函数声明。此消歧义规则有时是反直觉的,并且已被称为<a href="https://en.wikipedia.org/wiki/Most_vexing_parse" class="extiw" title="enwiki:Most vexing parse">最烦人的分析</a>。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <iterator></span>
|
|
<span class="co2">#include <string></span>
|
|
<span class="co2">#include <fstream></span>
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<a href="cpp-io-basic_ifstream.html"><span class="kw1732">std::<span class="me2">ifstream</span></span></a> file<span class="br0">(</span><span class="st0">"data.txt"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="co1">// 下面是函数声明:</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> str<span class="br0">(</span><a href="cpp-iterator-istreambuf_iterator.html"><span class="kw669">std::<span class="me2">istreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span><span class="br0">(</span>file<span class="br0">)</span>,
|
|
<a href="cpp-iterator-istreambuf_iterator.html"><span class="kw669">std::<span class="me2">istreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="co1">// 它声明名为 str 的函数,其返回类型为 std::string,</span>
|
|
<span class="co1">// 第一参数拥有 std::istreambuf_iterator<char> 类型和名称 "file"</span>
|
|
<span class="co1">// 第二参数无名称并拥有类型 std::istreambuf_iterator<char>(),</span>
|
|
<span class="co1">// 它被重写成函数指针类型 std::istreambuf_iterator<char>(*)()</span>
|
|
|
|
<span class="co1">// C++11 前的修正:用额外括号环绕其中一个实参</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> str<span class="br0">(</span> <span class="br0">(</span><a href="cpp-iterator-istreambuf_iterator.html"><span class="kw669">std::<span class="me2">istreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span><span class="br0">(</span>file<span class="br0">)</span> <span class="br0">)</span>,
|
|
<a href="cpp-iterator-istreambuf_iterator.html"><span class="kw669">std::<span class="me2">istreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="co1">// C++11 后的修正:列表初始化任意实参</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> str<span class="br0">(</span><a href="cpp-iterator-istreambuf_iterator.html"><span class="kw669">std::<span class="me2">istreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span><span class="br0">{</span>file<span class="br0">}</span>, <span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>类似地,在以函数式转型表达式 <span class="t-v">(3)</span> 为其最左子表达式的表达式语句,和声明语句间有歧义的情况下,以将它当做声明解决歧义。此消歧义是纯语法的:它不考虑语句中出现的名字除了是否为类型名之外的含义。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">struct</span> M <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">struct</span> L <span class="br0">{</span> L<span class="br0">(</span>M<span class="sy3">&</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
M n<span class="sy4">;</span>
|
|
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
|
|
M<span class="br0">(</span>m<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 声明,等价于 M m;</span>
|
|
L<span class="br0">(</span>n<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 非良构的声明</span>
|
|
L<span class="br0">(</span>l<span class="br0">)</span><span class="br0">(</span>m<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 仍然是声明</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <string></span>
|
|
<span class="co2">#include <iostream></span>
|
|
<span class="co2">#include <memory></span>
|
|
|
|
<span class="kw1">struct</span> Foo <span class="br0">{</span>
|
|
<span class="kw4">int</span> mem<span class="sy4">;</span>
|
|
<span class="kw1">explicit</span> Foo<span class="br0">(</span><span class="kw4">int</span> n<span class="br0">)</span> <span class="sy4">:</span> mem<span class="br0">(</span>n<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> s1<span class="br0">(</span><span class="st0">"test"</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 自 const char* 的构造函数</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> s2<span class="br0">(</span><span class="nu0">10</span>, <span class="st0">'a'</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<a href="cpp-memory-unique_ptr.html"><span class="kw733">std::<span class="me2">unique_ptr</span></span></a><span class="sy1"><</span><span class="kw4">int</span><span class="sy1">></span> p<span class="br0">(</span>new <span class="kw4">int</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK:允许 explicit 构造函数</span>
|
|
<span class="co1">// std::unique_ptr<int> p = new int(1); // 错误:构造函数为 explicit</span>
|
|
|
|
Foo f<span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// f 被直接初始化:</span>
|
|
<span class="co1">// 构造函数形参 n 从右值 2 复制初始化</span>
|
|
<span class="co1">// f.mem 从形参 n 直接初始化</span>
|
|
<span class="co1">// Foo f2 = 2; // 错误:构造函数为 explicit</span>
|
|
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> s1 <span class="sy1"><<</span> <span class="st0">' '</span> <span class="sy1"><<</span> s2 <span class="sy1"><<</span> <span class="st0">' '</span> <span class="sy1"><<</span> <span class="sy2">*</span>p <span class="sy1"><<</span> <span class="st0">' '</span> <span class="sy1"><<</span> f.<span class="me1">mem</span> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">test aaaaaaaaaa 1 2</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<ul>
|
|
<li><a href="cpp-language-copy_elision.html">复制消除</a></li>
|
|
<li><a href="cpp-language-converting_constructor.html">转换构造函数</a></li>
|
|
<li><a href="cpp-language-copy_assignment.html">复制赋值</a></li>
|
|
<li><a href="cpp-language-copy_constructor.html">复制构造函数</a></li>
|
|
<li><a href="cpp-language-default_constructor.html">默认构造函数</a></li>
|
|
<li><a href="cpp-language-destructor.html">析构函数</a></li>
|
|
<li><a href="cpp-language-explicit.html">explicit</a></li>
|
|
<li><a href="cpp-language-initialization.html">初始化</a>
|
|
<ul>
|
|
<li><a href="cpp-language-aggregate_initialization.html">聚合初始化</a></li>
|
|
<li><a href="cpp-language-constant_initialization.html">常量初始化</a></li>
|
|
<li><a href="cpp-language-default_initialization.html">默认初始化</a></li>
|
|
<li><strong class="selflink">直接初始化</strong></li>
|
|
<li><a href="cpp-language-initializer_list.html" class="mw-redirect">初始化器列表</a></li>
|
|
<li><a href="cpp-language-list_initialization.html">列表初始化</a></li>
|
|
<li><a href="cpp-language-reference_initialization.html">引用初始化</a></li>
|
|
<li><a href="cpp-language-value_initialization.html">值初始化</a></li>
|
|
<li><a href="cpp-language-zero_initialization.html">零初始化</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="cpp-language-move_assignment.html">移动赋值</a></li>
|
|
<li><a href="cpp-language-move_constructor.html">移动构造函数</a></li>
|
|
<li><a href="cpp-language-new.html">new</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|