Files
hustoj/web/cppreference-zh/chmhelp/cpp-language-reference.html
2025-08-01 12:57:54 +08:00

292 lines
36 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>&#24341;&#29992;&#22768;&#26126;</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_reference skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#24341;&#29992;&#22768;&#26126;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <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>&#22768;&#26126;&#20855;&#21517;&#21464;&#37327;&#20026;&#24341;&#29992;&#65292;&#21363;&#26082;&#23384;&#23545;&#35937;&#25110;&#20989;&#25968;&#30340;&#21035;&#21517;&#12290;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<p>&#24341;&#29992;&#21464;&#37327;&#22768;&#26126;&#26159;<a href="cpp-language-declarations.html">&#22768;&#26126;&#31526;</a>&#25317;&#26377;&#19979;&#21015;&#24418;&#24335;&#30340;&#31616;&#21333;&#22768;&#26126;&#65306;</p>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>&amp;</b></code> <span class="t-spar">&#23646;&#24615;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#22768;&#26126;&#31526;</span></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><code><b>&amp;&amp;</b></code> <span class="t-spar">&#23646;&#24615;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#22768;&#26126;&#31526;</span></td>
<td>(2)</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<div class="t-li1"><span class="t-li">1)</span> <b>&#24038;&#20540;&#24341;&#29992;&#22768;&#26126;&#31526;</b>&#65306;&#22768;&#26126; <span class="t-c"><span class="mw-geshi cpp source-cpp">S<span class="sy3">&amp;</span> D<span class="sy4">;</span></span></span> &#23558; <code>D</code> &#22768;&#26126;&#20026;&#21040; <span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span> &#25152;&#30830;&#23450;&#30340;&#31867;&#22411; <code>S</code> &#30340;<i>&#24038;&#20540;&#24341;&#29992;</i>&#12290;</div>
<div class="t-li1"><span class="t-li">2)</span> <b>&#21491;&#20540;&#24341;&#29992;&#22768;&#26126;&#31526;</b>&#65306;&#22768;&#26126; <span class="t-c"><span class="mw-geshi cpp source-cpp">S<span class="sy3">&amp;&amp;</span> D<span class="sy4">;</span></span></span> &#23558; <code>D</code> &#22768;&#26126;&#20026;&#21040; <span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span> &#25152;&#30830;&#23450;&#30340;&#31867;&#22411; <code>S</code> &#30340;<i>&#21491;&#20540;&#24341;&#29992;</i>&#12290;</div>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#22768;&#26126;&#31526;</span></td>
<td>-</td>
<td>&#38500;&#24341;&#29992;<a href="cpp-language-declarations.html">&#22768;&#26126;&#31526;</a>&#20043;&#22806;&#30340;&#20219;&#20309;&#20854;&#20182;&#22768;&#26126;&#31526;&#65288;&#19981;&#23384;&#22312;&#24341;&#29992;&#30340;&#24341;&#29992;&#65289;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#23646;&#24615;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span> &#21487;&#36873;&#30340;<a href="cpp-language-attributes.html">&#23646;&#24615;</a>&#21015;&#34920;</td>
</tr>
</table>
<p>&#24341;&#29992;&#24517;&#39035;&#34987;&#21021;&#22987;&#21270;&#20026;&#25351;&#20195;&#19968;&#20010;&#26377;&#25928;&#30340;&#23545;&#35937;&#25110;&#20989;&#25968;&#65306;&#35265;<a href="cpp-language-reference_initialization.html">&#24341;&#29992;&#21021;&#22987;&#21270;</a>&#12290;</p>
<p>&#19981;&#23384;&#22312; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span></span></span> &#30340;&#24341;&#29992;&#65292;&#20063;&#19981;&#23384;&#22312;&#24341;&#29992;&#30340;&#24341;&#29992;&#12290;</p>
<p>&#24341;&#29992;&#31867;&#22411;&#26080;&#27861;&#22312;&#39030;&#23618;&#34987; <a href="cpp-language-cv.html">cv &#38480;&#23450;</a>&#65307;&#22768;&#26126;&#20013;&#27809;&#26377;&#20026;&#27492;&#32780;&#35774;&#30340;&#35821;&#27861;&#65292;&#32780;&#22914;&#26524;&#28155;&#21152;&#38480;&#23450;&#24615;&#21040; typedef &#21517;&#12289; <a href="cpp-language-decltype.html"><code>decltype</code></a> &#35828;&#26126;&#31526;&#25110;<a href="cpp-language-template_parameters.html#.E7.B1.BB.E5.9E.8B.E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">&#31867;&#22411;&#27169;&#26495;&#24418;&#21442;</a>&#65292;&#21017;&#24573;&#30053;&#23427;&#12290;</p>
<p>&#24341;&#29992;&#19981;&#26159;&#23545;&#35937;&#65307;&#23427;&#20204;&#19981;&#24517;&#21344;&#29992;&#23384;&#20648;&#65292;&#23613;&#31649;&#32534;&#35793;&#22120;&#20250;&#22312;&#38656;&#35201;&#23454;&#29616;&#25152;&#38656;&#35821;&#20041;&#65288;&#20363;&#22914;&#65292;&#24341;&#29992;&#31867;&#22411;&#30340;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#36890;&#24120;&#20250;&#22686;&#21152;&#31867;&#30340;&#22823;&#23567;&#65292;&#37327;&#20026;&#23384;&#20648;&#20869;&#23384;&#22320;&#22336;&#25152;&#38656;&#65289;&#30340;&#24773;&#20917;&#19979;&#20998;&#37197;&#23384;&#20648;&#12290;</p>
<p>&#22240;&#20026;&#24341;&#29992;&#19981;&#26159;&#23545;&#35937;&#65292;&#25152;&#20197;&#19981;&#23384;&#22312;&#24341;&#29992;&#30340;&#25968;&#32452;&#65292;&#19981;&#23384;&#22312;&#25351;&#21521;&#24341;&#29992;&#30340;&#25351;&#38024;&#65292;&#19981;&#23384;&#22312;&#24341;&#29992;&#30340;&#24341;&#29992;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">int</span><span class="sy3">&amp;</span> a<span class="br0">[</span><span class="nu0">3</span><span class="br0">]</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;</span>
<span class="kw4">int</span><span class="sy3">&amp;</span><span class="sy2">*</span> p<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;</span>
<span class="kw4">int</span><span class="sy3">&amp;</span> <span class="sy3">&amp;</span>r<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<h5><span class="mw-headline" id=".E5.BC.95.E7.94.A8.E6.8A.98.E5.8F.A0">&#24341;&#29992;&#25240;&#21472;</span></h5>
<p>&#36890;&#36807;&#27169;&#26495;&#25110; typedef &#20013;&#30340;&#31867;&#22411;&#25805;&#20316;&#21487;&#20197;&#26500;&#25104;&#24341;&#29992;&#30340;&#24341;&#29992;&#65292;&#27492;&#26102;&#36866;&#29992;<i>&#24341;&#29992;&#25240;&#21472;&#65288;reference collapsing&#65289;</i>&#35268;&#21017;&#65306;&#21491;&#20540;&#24341;&#29992;&#30340;&#21491;&#20540;&#24341;&#29992;&#25240;&#21472;&#25104;&#21491;&#20540;&#24341;&#29992;&#65292;&#25152;&#26377;&#20854;&#20182;&#32452;&#21512;&#22343;&#25240;&#21472;&#25104;&#24038;&#20540;&#24341;&#29992;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">typedef</span> <span class="kw4">int</span><span class="sy3">&amp;</span> lref<span class="sy4">;</span>
<span class="kw1">typedef</span> <span class="kw4">int</span><span class="sy3">&amp;&amp;</span> rref<span class="sy4">;</span>
<span class="kw4">int</span> n<span class="sy4">;</span>
lref<span class="sy3">&amp;</span> r1 <span class="sy1">=</span> n<span class="sy4">;</span> <span class="co1">// r1 &#30340;&#31867;&#22411;&#26159; int&amp;</span>
lref<span class="sy3">&amp;&amp;</span> r2 <span class="sy1">=</span> n<span class="sy4">;</span> <span class="co1">// r2 &#30340;&#31867;&#22411;&#26159; int&amp;</span>
rref<span class="sy3">&amp;</span> r3 <span class="sy1">=</span> n<span class="sy4">;</span> <span class="co1">// r3 &#30340;&#31867;&#22411;&#26159; int&amp;</span>
rref<span class="sy3">&amp;&amp;</span> r4 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// r4 &#30340;&#31867;&#22411;&#26159; int&amp;&amp;</span></pre></div>
</div>
<p>&#65288;&#36825;&#26465;&#35268;&#21017;&#65292;&#21644;&#23558; <code>T&amp;&amp;</code> &#29992;&#20110;&#20989;&#25968;&#27169;&#26495;&#26102;&#30340;<a href="cpp-language-template_argument_deduction.html">&#27169;&#26495;&#23454;&#21442;&#25512;&#23548;</a>&#30340;&#29305;&#27530;&#35268;&#21017;&#19968;&#36215;&#65292;&#32452;&#25104;&#20102;&#20351;&#24471; <span class="t-lc"><a href="cpp-utility-forward.html">std::forward</a></span> &#21487;&#34892;&#30340;&#35268;&#21017;&#12290;&#65289;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<h4><span class="mw-headline" id=".E5.B7.A6.E5.80.BC.E5.BC.95.E7.94.A8">&#24038;&#20540;&#24341;&#29992;</span></h4>
<p>&#24038;&#20540;&#24341;&#29992;&#21487;&#29992;&#20110;&#24314;&#31435;&#26082;&#23384;&#23545;&#35937;&#30340;&#21035;&#21517;&#65288;&#21487;&#25317;&#26377;&#19981;&#21516;&#30340; cv &#38480;&#23450;&#65289;&#65306;</p>
<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 &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</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> s <span class="sy1">=</span> <span class="st0">&quot;Ex&quot;</span><span class="sy4">;</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;</span> r1 <span class="sy1">=</span> s<span class="sy4">;</span>
<span class="kw4">const</span> <a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;</span> r2 <span class="sy1">=</span> s<span class="sy4">;</span>
r1 <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;ample&quot;</span><span class="sy4">;</span> <span class="co1">// &#20462;&#25913; s</span>
<span class="co1">// r2 += &quot;!&quot;; // &#38169;&#35823;&#65306;&#19981;&#33021;&#36890;&#36807;&#21040; const &#30340;&#24341;&#29992;&#20462;&#25913;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> r2 <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span> <span class="co1">// &#25171;&#21360; s&#65292;&#23427;&#29616;&#22312;&#20445;&#26377; &quot;Example&quot;</span>
<span class="br0">}</span></pre></div>
</div>
</div>
<p>&#23427;&#20204;&#20063;&#33021;&#29992;&#20110;&#22312;&#20989;&#25968;&#35843;&#29992;&#20013;&#23454;&#29616;&#25353;&#24341;&#29992;&#20256;&#36882;&#35821;&#20041;&#65306;</p>
<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 &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="kw4">void</span> double_string<span class="br0">(</span><a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;</span> s<span class="br0">)</span> <span class="br0">{</span>
s <span class="sy2">+</span><span class="sy1">=</span> s<span class="sy4">;</span> <span class="co1">// &#39;s&#39; &#19982; main() &#30340; &#39;str&#39; &#26159;&#21516;&#19968;&#23545;&#35937;</span>
<span class="br0">}</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> str <span class="sy1">=</span> <span class="st0">&quot;Test&quot;</span><span class="sy4">;</span>
double_string<span class="br0">(</span>str<span class="br0">)</span><span class="sy4">;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> str <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
</div>
<p>&#24403;&#20989;&#25968;&#30340;&#36820;&#22238;&#20540;&#26159;&#24038;&#20540;&#24341;&#29992;&#26102;&#65292;&#20989;&#25968;&#35843;&#29992;&#34920;&#36798;&#24335;&#25104;&#20026;<a href="cpp-language-value_category.html">&#24038;&#20540;&#34920;&#36798;&#24335;</a>&#65306;</p>
<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 &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="kw4">char</span><span class="sy3">&amp;</span> char_number<span class="br0">(</span><a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;</span> s, <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> n<span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">return</span> s.<span class="me1">at</span><span class="br0">(</span>n<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// string::at() &#36820;&#22238; char &#30340;&#24341;&#29992;</span>
<span class="br0">}</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> str <span class="sy1">=</span> <span class="st0">&quot;Test&quot;</span><span class="sy4">;</span>
char_number<span class="br0">(</span>str, <span class="nu0">1</span><span class="br0">)</span> <span class="sy1">=</span> <span class="st0">&#39;a&#39;</span><span class="sy4">;</span> <span class="co1">// &#20989;&#25968;&#35843;&#29992;&#26159;&#24038;&#20540;&#65292;&#21487;&#34987;&#36171;&#20540;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> str <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<h4><span class="mw-headline" id=".E5.8F.B3.E5.80.BC.E5.BC.95.E7.94.A8">&#21491;&#20540;&#24341;&#29992;</span></h4>
<p>&#21491;&#20540;&#24341;&#29992;&#21487;&#29992;&#20110;&#20026;&#20020;&#26102;&#23545;&#35937;<a href="cpp-language-reference_initialization.html#.E4.B8.B4.E6.97.B6.E9.87.8F.E7.94.9F.E5.AD.98.E6.9C.9F">&#24310;&#38271;&#29983;&#23384;&#26399;</a>&#65288;&#27880;&#24847;&#65292;&#21040; const &#30340;&#24038;&#20540;&#24341;&#29992;&#20063;&#33021;&#24310;&#38271;&#20020;&#26102;&#23545;&#35937;&#29983;&#23384;&#26399;&#65292;&#20294;&#36825;&#20123;&#23545;&#35937;&#26080;&#27861;&#22240;&#27492;&#34987;&#20462;&#25913;&#65289;&#65306;</p>
<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 &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</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="sy1">=</span> <span class="st0">&quot;Test&quot;</span><span class="sy4">;</span>
<span class="co1">// std::string&amp;&amp; r1 = s1; // &#38169;&#35823;&#65306;&#19981;&#33021;&#32465;&#23450;&#21040;&#24038;&#20540;</span>
<span class="kw4">const</span> <a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;</span> r2 <span class="sy1">=</span> s1 <span class="sy2">+</span> s1<span class="sy4">;</span> <span class="co1">// okay&#65306;&#21040; const &#30340;&#24038;&#20540;&#24341;&#29992;&#24310;&#38271;&#29983;&#23384;&#26399;</span>
<span class="co1">// r2 += &quot;Test&quot;; // &#38169;&#35823;&#65306;&#19981;&#33021;&#36890;&#36807;&#21040; const &#30340;&#24341;&#29992;&#20462;&#25913;</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;&amp;</span> r3 <span class="sy1">=</span> s1 <span class="sy2">+</span> s1<span class="sy4">;</span> <span class="co1">// okay&#65306;&#21491;&#20540;&#24341;&#29992;&#24310;&#38271;&#29983;&#23384;&#26399;</span>
r3 <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;Test&quot;</span><span class="sy4">;</span> <span class="co1">// okay&#65306;&#33021;&#36890;&#36807;&#21040;&#38750; const &#30340;&#24341;&#29992;&#20462;&#25913;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> r3 <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
</div>
<p>&#26356;&#37325;&#35201;&#30340;&#26159;&#65292;&#24403;&#20989;&#25968;&#21516;&#26102;&#20855;&#26377;&#21491;&#20540;&#24341;&#29992;&#21644;&#24038;&#20540;&#24341;&#29992;&#30340;<a href="cpp-language-overload_resolution.html">&#37325;&#36733;</a>&#26102;&#65292;&#21491;&#20540;&#24341;&#29992;&#37325;&#36733;&#32465;&#23450;&#21040;&#21491;&#20540;&#65288;&#21253;&#21547;&#32431;&#21491;&#20540;&#21644;&#20129;&#20540;&#65289;&#65292;&#32780;&#24038;&#20540;&#24341;&#29992;&#37325;&#36733;&#32465;&#23450;&#21040;&#24038;&#20540;&#65306;</p>
<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 &lt;iostream&gt;</span>
<span class="co2">#include &lt;utility&gt;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span><span class="sy3">&amp;</span> x<span class="br0">)</span> <span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#24038;&#20540;&#24341;&#29992;&#37325;&#36733; f(&quot;</span> <span class="sy1">&lt;&lt;</span> x <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;)<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">int</span><span class="sy3">&amp;</span> x<span class="br0">)</span> <span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#21040; const &#30340;&#24038;&#20540;&#24341;&#29992;&#37325;&#36733; f(&quot;</span> <span class="sy1">&lt;&lt;</span> x <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;)<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span><span class="sy3">&amp;&amp;</span> x<span class="br0">)</span> <span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#21491;&#20540;&#24341;&#29992;&#37325;&#36733; f(&quot;</span> <span class="sy1">&lt;&lt;</span> x <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;)<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
<span class="kw4">const</span> <span class="kw4">int</span> ci <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span>
f<span class="br0">(</span>i<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(int&amp;)</span>
f<span class="br0">(</span>ci<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(const int&amp;)</span>
f<span class="br0">(</span><span class="nu0">3</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(int&amp;&amp;)&#65292;&#22914;&#26524;&#27809;&#26377; f(int&amp;&amp;) &#37325;&#36733;&#21017;&#20250;&#35843;&#29992; f(const int&amp;)</span>
f<span class="br0">(</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>i<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(int&amp;&amp;)</span>
<span class="co1">// &#21491;&#20540;&#24341;&#29992;&#21464;&#37327;&#22312;&#29992;&#20110;&#34920;&#36798;&#24335;&#26102;&#26159;&#24038;&#20540;</span>
<span class="kw4">int</span><span class="sy3">&amp;&amp;</span> x <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
f<span class="br0">(</span>x<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(int&amp; x)</span>
f<span class="br0">(</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(int&amp;&amp; x)</span>
<span class="br0">}</span></pre></div>
</div>
</div>
<p>&#36825;&#20801;&#35768;&#22312;&#36866;&#24403;&#26102;&#26426;&#33258;&#21160;&#36873;&#25321;<a href="cpp-language-move_constructor.html">&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;</a>&#12289;<a href="cpp-language-move_assignment.html">&#31227;&#21160;&#36171;&#20540;</a>&#36816;&#31639;&#31526;&#21644;&#20854;&#20182;&#20855;&#26377;&#31227;&#21160;&#33021;&#21147;&#30340;&#20989;&#25968;&#65288;&#20363;&#22914; <span class="t-lc"><a href="cpp-container-vector-push_back.html">std::vector::push_back()</a></span>&#65289;&#12290;</p>
<p>&#22240;&#20026;&#21491;&#20540;&#24341;&#29992;&#33021;&#32465;&#23450;&#21040;&#20129;&#20540;&#65292;&#25152;&#20197;&#23427;&#20204;&#33021;&#25351;&#20195;&#38750;&#20020;&#26102;&#23545;&#35937;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">int</span> i2 <span class="sy1">=</span> <span class="nu0">42</span><span class="sy4">;</span>
<span class="kw4">int</span><span class="sy3">&amp;&amp;</span> rri <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>i2<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#30452;&#25509;&#32465;&#23450;&#21040; i2</span></pre></div>
</div>
<p>&#36825;&#20351;&#24471;&#20316;&#29992;&#22495;&#20013;&#19981;&#20877;&#38656;&#35201;&#30340;&#23545;&#35937;&#21487;&#20197;&#34987;&#31227;&#21160;&#20986;&#21435;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> v<span class="br0">{</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span>,<span class="nu0">5</span><span class="br0">}</span><span class="sy4">;</span>
<a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> v2<span class="br0">(</span>std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>v<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#32465;&#23450;&#21491;&#20540;&#24341;&#29992;&#21040; v</span>
<a href="cpp-error-assert.html"><span class="kw774">assert</span></a><span class="br0">(</span>v.<span class="me1">empty</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<h4><span class="mw-headline" id=".E8.BD.AC.E5.8F.91.E5.BC.95.E7.94.A8">&#36716;&#21457;&#24341;&#29992;</span></h4>
<p>&#36716;&#21457;&#24341;&#29992;&#26159;&#19968;&#31181;&#29305;&#27530;&#30340;&#24341;&#29992;&#65292;&#23427;&#20445;&#25345;&#20989;&#25968;&#23454;&#21442;&#30340;&#20540;&#31867;&#21035;&#65292;&#20351;&#24471; <span class="t-lc"><a href="cpp-utility-forward.html">std::forward</a></span> &#33021;&#29992;&#26469;<i>&#36716;&#21457;</i>&#23454;&#21442;&#12290;&#36716;&#21457;&#24341;&#29992;&#26159;&#19979;&#21015;&#20043;&#19968;&#65306;</p>
<div class="t-li1"><span class="t-li">1)</span> &#20989;&#25968;&#27169;&#26495;&#30340;&#20989;&#25968;&#24418;&#21442;&#65292;&#20854;&#34987;&#22768;&#26126;&#20026;&#21516;&#19968;&#20989;&#25968;&#27169;&#26495;&#30340;<a href="cpp-language-template_parameters.html#.E7.B1.BB.E5.9E.8B.E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">&#31867;&#22411;&#27169;&#26495;&#24418;&#21442;</a>&#30340;&#26080; cv &#38480;&#23450;&#30340;&#21491;&#20540;&#24341;&#29992;&#65306;
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">int</span> f<span class="br0">(</span>T<span class="sy3">&amp;&amp;</span> x<span class="br0">)</span> <span class="br0">{</span> <span class="co1">// x &#26159;&#36716;&#21457;&#24341;&#29992;</span>
<span class="kw1">return</span> g<span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20174;&#32780;&#33021;&#34987;&#36716;&#21457;</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">int</span> i<span class="sy4">;</span>
f<span class="br0">(</span>i<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#23454;&#21442;&#26159;&#24038;&#20540;&#65292;&#35843;&#29992; f&lt;int&amp;&gt;(int&amp;), std::forward&lt;int&amp;&gt;(x) &#26159;&#24038;&#20540;</span>
f<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#23454;&#21442;&#26159;&#21491;&#20540;&#65292;&#35843;&#29992; f&lt;int&gt;(int&amp;&amp;), std::forward&lt;int&gt;(x) &#26159;&#21491;&#20540;</span>
<span class="br0">}</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw4">int</span> g<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&amp;&amp;</span> x<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// x &#19981;&#26159;&#36716;&#21457;&#24341;&#29992;&#65306;const T &#19981;&#26159;&#26080; cv &#38480;&#23450;&#30340;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span> <span class="kw1">struct</span> A <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> U<span class="sy1">&gt;</span>
A<span class="br0">(</span>T<span class="sy3">&amp;&amp;</span> x, U<span class="sy3">&amp;&amp;</span> y, <span class="kw4">int</span><span class="sy2">*</span> p<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// x &#19981;&#26159;&#36716;&#21457;&#24341;&#29992;&#65306;T &#19981;&#26159;&#26500;&#36896;&#20989;&#25968;&#30340;&#31867;&#22411;&#27169;&#26495;&#24418;&#21442;</span>
<span class="co1">// &#20294; y &#26159;&#36716;&#21457;&#24341;&#29992;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">2)</span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">auto</span><span class="sy3">&amp;&amp;</span></span></span>&#65292;&#20294;&#24403;&#20854;&#20174;&#33457;&#25324;&#21495;&#21253;&#22260;&#30340;&#21021;&#22987;&#21270;&#22120;&#21015;&#34920;&#25512;&#23548;&#26102;&#38500;&#22806;&#65306;</div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">auto</span><span class="sy3">&amp;&amp;</span> vec <span class="sy1">=</span> foo<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// foo() &#21487;&#20197;&#26159;&#24038;&#20540;&#25110;&#21491;&#20540;&#65292;vec &#26159;&#36716;&#21457;&#24341;&#29992;</span>
<span class="kw4">auto</span> i <span class="sy1">=</span> <a href="cpp-iterator-begin.html"><span class="kw676">std::<span class="me2">begin</span></span></a><span class="br0">(</span>vec<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20063;&#21487;&#20197;</span>
<span class="br0">(</span><span class="sy2">*</span>i<span class="br0">)</span><span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// &#20063;&#21487;&#20197;</span>
g<span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>decltype<span class="br0">(</span>vec<span class="br0">)</span><span class="sy1">&gt;</span><span class="br0">(</span>vec<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#36716;&#21457;&#65292;&#20445;&#25345;&#20540;&#31867;&#21035;</span>
<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">auto</span><span class="sy3">&amp;&amp;</span> x<span class="sy4">:</span> f<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
<span class="co1">// x &#26159;&#36716;&#21457;&#24341;&#29992;&#65307;&#36825;&#26159;&#20351;&#29992;&#33539;&#22260; for &#24490;&#29615;&#26368;&#23433;&#20840;&#30340;&#26041;&#24335;</span>
<span class="br0">}</span>
<span class="kw4">auto</span><span class="sy3">&amp;&amp;</span> z <span class="sy1">=</span> <span class="br0">{</span><span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">3</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// *&#19981;&#26159;*&#36716;&#21457;&#24341;&#29992;&#65288;&#21021;&#22987;&#21270;&#22120;&#21015;&#34920;&#30340;&#29305;&#27530;&#24773;&#24418;&#65289;</span></pre></div>
</div>
<p>&#21442;&#38405;<a href="cpp-language-template_argument_deduction.html#.E4.BB.8E.E5.87.BD.E6.95.B0.E8.B0.83.E7.94.A8.E6.8E.A8.E5.AF.BC">&#27169;&#26495;&#23454;&#21442;&#25512;&#23548;</a>&#21644; <span class="t-lc"><a href="cpp-utility-forward.html">std::forward</a></span>&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<h4><span class="mw-headline" id=".E6.82.AC.E5.9E.82.E5.BC.95.E7.94.A8">&#24748;&#22402;&#24341;&#29992;</span></h4>
<p>&#23613;&#31649;&#24341;&#29992;&#19968;&#26086;&#21021;&#22987;&#21270;&#23601;&#22987;&#32456;&#25351;&#20195;&#19968;&#20010;&#26377;&#25928;&#30340;&#23545;&#35937;&#25110;&#20989;&#25968;&#65292;&#20294;&#26377;&#21487;&#33021;&#21019;&#24314;&#19968;&#20010;&#31243;&#24207;&#65292;&#20854;&#20013;&#34987;&#25351;&#20195;&#23545;&#35937;&#30340;<a href="cpp-language-lifetime.html">&#29983;&#23384;&#26399;</a>&#32467;&#26463;&#32780;&#24341;&#29992;&#20173;&#20445;&#25345;&#21487;&#35775;&#38382;&#65288;<i>&#24748;&#22402;&#65288;dangling&#65289;</i>&#65289;&#12290;&#35775;&#38382;&#36825;&#31181;&#24341;&#29992;&#26159;&#26410;&#23450;&#20041;&#34892;&#20026;&#12290; &#19968;&#20010;&#24120;&#35265;&#20363;&#23376;&#26159;&#36820;&#22238;&#33258;&#21160;&#21464;&#37327;&#30340;&#24341;&#29992;&#30340;&#20989;&#25968;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;</span> f<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> s <span class="sy1">=</span> <span class="st0">&quot;Example&quot;</span><span class="sy4">;</span>
<span class="kw1">return</span> s<span class="sy4">;</span> <span class="co1">// &#36864;&#20986; s &#30340;&#20316;&#29992;&#22495;&#65306;&#35843;&#29992;&#20854;&#26512;&#26500;&#20989;&#25968;&#24182;&#35299;&#20998;&#37197;&#20854;&#23384;&#20648;</span>
<span class="br0">}</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy3">&amp;</span> r <span class="sy1">=</span> f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#24748;&#22402;&#24341;&#29992;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> r<span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;&#65306;&#20174;&#24748;&#22402;&#24341;&#29992;&#35835;&#21462;</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> s <span class="sy1">=</span> f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;&#65306;&#20174;&#24748;&#22402;&#24341;&#29992;&#22797;&#21046;&#21021;&#22987;&#21270;</span></pre></div>
</div>
<p>&#27880;&#24847;&#65292;&#21491;&#20540;&#24341;&#29992;&#21644;&#21040; const &#30340;&#24038;&#20540;&#24341;&#29992;&#33021;&#24310;&#38271;&#20020;&#26102;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#65288;&#21442;&#38405;<a href="cpp-language-reference_initialization.html#.E4.B8.B4.E6.97.B6.E9.87.8F.E7.94.9F.E5.AD.98.E6.9C.9F">&#24341;&#29992;&#21021;&#22987;&#21270;</a>&#20013;&#30340;&#35268;&#21017;&#21644;&#20363;&#22806;&#24773;&#20917;&#65289;&#12290;</p>
<p>&#22914;&#26524;&#34987;&#25351;&#20195;&#23545;&#35937;&#34987;&#38144;&#27585;&#65288;&#20363;&#22914;&#36890;&#36807;&#26174;&#24335;&#30340;&#26512;&#26500;&#20989;&#25968;&#35843;&#29992;&#65289;&#65292;&#20294;&#23384;&#20648;&#23578;&#26410;&#34987;&#35299;&#20998;&#37197;&#65292;&#21017;&#21040;&#29983;&#23384;&#26399;&#22806;&#30340;&#23545;&#35937;&#30340;&#24341;&#29992;&#20173;&#33021;&#20197;&#26377;&#38480;&#30340;&#26041;&#24335;&#20351;&#29992;&#65292;&#19988;&#24403;&#22312;&#21516;&#19968;&#23384;&#20648;&#20013;&#37325;&#26032;&#21019;&#24314;&#23545;&#35937;&#26102;&#20063;&#21487;&#20197;&#21464;&#20026;&#26377;&#25928;&#65288;&#32454;&#33410;&#35265;<a href="cpp-language-lifetime.html#.E5.9C.A8.E7.94.9F.E5.AD.98.E6.9C.9F.E4.B9.8B.E5.A4.96.E8.BF.9B.E8.A1.8C.E8.AE.BF.E9.97.AE">&#22312;&#29983;&#23384;&#26399;&#20043;&#22806;&#36827;&#34892;&#35775;&#38382;</a>&#65289;&#12290;</p>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>