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

293 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>&#40664;&#35748;&#23454;&#21442;</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_default_arguments skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#40664;&#35748;&#23454;&#21442;</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>&#20801;&#35768;&#35843;&#29992;&#20989;&#25968;&#26102;&#19981;&#25552;&#20379;&#19968;&#20010;&#25110;&#22810;&#20010;&#23614;&#37096;&#30340;&#23454;&#21442;&#12290;</p>
<p>&#36890;&#36807;&#20026;<a href="cpp-language-function.html">&#20989;&#25968;&#22768;&#26126;</a>&#30340; <span class="t-spar">&#24418;&#21442;&#21015;&#34920;</span> &#20013;&#30340;&#24418;&#21442;&#20351;&#29992;&#19979;&#21015;&#35821;&#27861;&#26469;&#25351;&#23450;&#40664;&#35748;&#23454;&#21442;&#12290;</p>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><span class="t-spar">&#23646;&#24615;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span> <span class="t-spar">&#22768;&#26126;&#31526;</span> <code><b>=</b></code> <span class="t-spar">&#21021;&#22987;&#21270;&#22120;</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><span class="t-spar">&#23646;&#24615;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span> <span class="t-spar">&#25277;&#35937;&#22768;&#26126;&#31526;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>=</b></code> <span class="t-spar">&#21021;&#22987;&#21270;&#22120;</span></td>
<td>(2)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<p>&#40664;&#35748;&#23454;&#21442;&#29992;&#20110;&#21462;&#20195;&#20989;&#25968;&#35843;&#29992;&#20013;&#32570;&#22833;&#30340;&#23614;&#37096;&#23454;&#21442;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">void</span> point<span class="br0">(</span><span class="kw4">int</span> x <span class="sy1">=</span> <span class="nu0">3</span>, <span class="kw4">int</span> y <span class="sy1">=</span> <span class="nu0">4</span><span class="br0">)</span><span class="sy4">;</span>
point<span class="br0">(</span><span class="nu0">1</span>,<span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; point(1,2)</span>
point<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; point(1,4)</span>
point<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; point(3,4)</span></pre></div>
</div>
<p>&#22312;&#20989;&#25968;&#22768;&#26126;&#20013;&#65292;&#25152;&#26377;&#22312;&#25317;&#26377;&#40664;&#35748;&#23454;&#21442;&#30340;&#24418;&#21442;&#20043;&#21518;&#30340;&#24418;&#21442;&#24517;&#39035;&#65306;</p>
<ul>
<li>&#25317;&#26377;&#22312;&#36825;&#20010;&#25110;&#21516;&#19968;&#20316;&#29992;&#22495;&#20013;&#20808;&#21069;&#30340;&#22768;&#26126;&#20013;&#25152;&#25552;&#20379;&#30340;&#40664;&#35748;&#23454;&#21442;&#65306;</li>
</ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">int</span> x<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">1</span>, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#21482;&#26377;&#23614;&#38543;&#23454;&#21442;&#33021;&#25317;&#26377;&#40664;&#35748;&#20540;&#65288;&#20551;&#35774;&#21069;&#38754;&#27809;&#26377; x &#30340;&#22768;&#26126;&#65289;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> n, <span class="kw4">int</span> k <span class="sy1">=</span> <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">0</span>, <span class="kw4">int</span> k<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#21516;&#19968;&#20316;&#29992;&#22495;&#20013;&#20043;&#21069;&#30340;&#22768;&#26126;&#20026; k &#25552;&#20379;&#20102;&#40664;&#35748;&#23454;&#21442;</span>
<span class="kw4">void</span> g<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">7</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">void</span> g<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">1</span>, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#22312;&#21516;&#19968;&#20316;&#29992;&#22495;</span>
<span class="br0">}</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<dl>
<dd>
<ul>
<li>...&#38500;&#38750;&#35813;&#24418;&#21442;&#26159;&#20174;&#26576;&#20010;&#24418;&#21442;&#21253;&#23637;&#24320;&#24471;&#21040;&#30340;&#65306;</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">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> ...<span class="me1">T</span><span class="sy1">&gt;</span> <span class="kw1">struct</span> C <span class="br0">{</span> <span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">0</span>, T...<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
C<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> c<span class="sy4">;</span> <span class="co1">// OK&#65307;&#23454;&#20363;&#21270;&#20102;&#22768;&#26126; void C::f(int n = 0, int)</span></pre></div>
</div>
<ul>
<li>&#25110;&#32773;&#26159;&#20989;&#25968;&#24418;&#21442;&#21253;&#65306;</li>
</ul>
<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>...<span class="me1">T</span><span class="sy1">&gt;</span> <span class="kw4">void</span> h<span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span>, T... <span class="me1">args</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-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<p>&#30465;&#30053;&#21495;&#19981;&#26159;&#24418;&#21442;&#65292;&#25152;&#20197;&#23427;&#21487;&#20197;&#36319;&#22312;&#24102;&#26377;&#40664;&#35748;&#23454;&#21442;&#30340;&#24418;&#21442;&#20043;&#21518;&#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> g<span class="br0">(</span><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">0</span>, ...<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span></pre></div>
</div>
<p>&#40664;&#35748;&#23454;&#21442;&#21482;&#33021;&#22312;<a href="cpp-language-function.html">&#20989;&#25968;&#22768;&#26126;</a><span class="t-rev-inl t-since-cxx11"><span>&#21644; <a href="cpp-language-lambda.html">lambda &#34920;&#36798;&#24335;</a></span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#30340;&#24418;&#21442;&#21015;&#34920;&#20013;&#20986;&#29616;&#65292;&#32780;&#19981;&#33021;&#22312;&#20989;&#25968;&#25351;&#38024;&#12289;&#21040;&#20989;&#25968;&#30340;&#24341;&#29992;&#65292;&#25110;&#22312; <a href="cpp-language-typedef.html">typedef</a> &#22768;&#26126;&#20013;&#20986;&#29616;&#12290;&#27169;&#26495;&#24418;&#21442;&#21015;&#34920;&#20026;&#20854;<a href="cpp-language-template_parameters.html#.E9.BB.98.E8.AE.A4.E6.A8.A1.E6.9D.BF.E5.AE.9E.E5.8F.82">&#40664;&#35748;&#27169;&#26495;&#23454;&#21442;</a>&#20351;&#29992;&#20102;&#31867;&#20284;&#30340;&#35821;&#27861;&#12290;</p>
<p>&#23545;&#20110;&#38750;&#27169;&#26495;&#20989;&#25968;&#65292;&#24403;&#22312;&#21516;&#19968;&#20316;&#29992;&#22495;&#20013;&#37325;&#22768;&#26126;&#20989;&#25968;&#26102;&#65292;&#21487;&#20197;&#21521;&#24050;&#22768;&#26126;&#30340;&#20989;&#25968;&#28155;&#21152;&#40664;&#35748;&#23454;&#21442;&#12290;&#22312;&#20989;&#25968;&#35843;&#29992;&#28857;&#65292;&#21487;&#29992;&#30340;&#40664;&#35748;&#23454;&#21442;&#26159;&#30001;&#35813;&#20989;&#25968;&#25152;&#26377;&#21487;&#35265;&#30340;&#22768;&#26126;&#20013;&#25152;&#25552;&#20379;&#30340;&#40664;&#35748;&#23454;&#21442;&#30340;&#24182;&#38598;&#12290;&#37325;&#22768;&#26126;&#19981;&#33021;&#20026;&#24050;&#26377;&#21487;&#35265;&#40664;&#35748;&#20540;&#30340;&#23454;&#21442;&#24341;&#20837;&#40664;&#35748;&#20540;&#65288;&#21363;&#20351;&#20540;&#30456;&#21516;&#65289;&#12290;&#20869;&#23618;&#20316;&#29992;&#22495;&#20013;&#30340;&#37325;&#22768;&#26126;&#19981;&#20174;&#22806;&#23618;&#20316;&#29992;&#22495;&#33719;&#24471;&#40664;&#35748;&#23454;&#21442;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// #1 </span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">7</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// #2 OK &#65306;&#28155;&#21152;&#21040;&#40664;&#35748;</span>
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
f<span class="br0">(</span><span class="nu0">3</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// #1 &#19982; #2 &#22312;&#20316;&#29992;&#22495;&#20013;&#65307;&#36827;&#34892;&#23545; f(3,7) &#30340;&#35843;&#29992;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">1</span>, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#20869;&#23618;&#20316;&#29992;&#22495;&#22768;&#26126;&#19981;&#33719;&#24471;&#40664;&#35748;&#23454;&#21442;</span>
<span class="br0">}</span>
<span class="kw4">void</span> m<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// &#26032;&#20316;&#29992;&#22495;&#24320;&#22987;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20869;&#23618;&#20316;&#29992;&#22495;&#22768;&#26126;&#65307;&#26080;&#40664;&#35748;&#23454;&#21442;&#12290;</span>
f<span class="br0">(</span><span class="nu0">4</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#35843;&#29992; f(int, int) &#30340;&#23454;&#21442;&#19981;&#36275;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">6</span><span class="br0">)</span><span class="sy4">;</span>
f<span class="br0">(</span><span class="nu0">4</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#35843;&#29992; f(4,6);</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">6</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#33021;&#22312;&#21516;&#19968;&#20316;&#29992;&#22495;&#20013;&#37325;&#22768;&#26126;&#40664;&#35748;&#23454;&#21442;</span>
<span class="br0">}</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">1</span>, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// #3 OK&#65292;&#21521; #2 &#28155;&#21152;&#40664;&#35748;&#23454;&#21442;</span>
<span class="kw4">void</span> n<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// &#26032;&#20316;&#29992;&#22495;&#24320;&#22987;</span>
f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// #1&#12289;#2 &#21450; #3 &#22312;&#20316;&#29992;&#22495;&#20013;&#65306;&#35843;&#29992; f(1, 7);</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#22914;&#26524;&#19968;&#20010; <a href="cpp-language-inline.html">inline</a> &#20989;&#25968;&#22312;&#19981;&#21516;&#30340;&#32763;&#35793;&#21333;&#20803;&#20013;&#22768;&#26126;&#65292;&#37027;&#20040;&#40664;&#35748;&#23454;&#21442;&#30340;&#32047;&#31215;&#38598;&#24517;&#39035;&#22312;&#27599;&#20010;&#32763;&#35793;&#21333;&#20803;&#30340;&#32467;&#23614;&#30456;&#21516;&#12290;</p>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<p>&#22914;&#26524;&#19968;&#20010;&#38750; inline &#20989;&#25968;&#22312;&#19981;&#21516;&#32763;&#35793;&#21333;&#20803;&#30340;&#21516;&#19968;&#21629;&#21517;&#31354;&#38388;&#20316;&#29992;&#22495;&#20013;&#22768;&#26126;&#65292;&#37027;&#20040;&#23545;&#24212;&#30340;&#40664;&#35748;&#23454;&#21442;&#22312;&#23384;&#22312;&#26102;&#24517;&#39035;&#30456;&#21516;&#65288;&#20294;&#26576;&#20123;&#32763;&#35793;&#21333;&#20803;&#20013;&#21487;&#20197;&#32570;&#23569;&#19968;&#20123;&#40664;&#35748;&#23454;&#21442;&#65289;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#22914;&#26524; <a href="cpp-language-friend.html">friend</a> &#22768;&#26126;&#25351;&#23450;&#20102;&#40664;&#35748;&#23454;&#21442;&#65292;&#37027;&#20040;&#23427;&#24517;&#39035;&#26159;&#21451;&#20803;&#20989;&#25968;&#23450;&#20041;&#65292;&#19988;&#35813;&#32763;&#35793;&#21333;&#20803;&#20013;&#19981;&#33021;&#26377;&#27492;&#20989;&#25968;&#30340;&#20854;&#20182;&#22768;&#26126;&#12290;</p>
<p><a href="cpp-language-namespace.html#using_.E5.A3.B0.E6.98.8E">using &#22768;&#26126;</a>&#23558;&#24050;&#30693;&#30340;&#40664;&#35748;&#23454;&#21442;&#38598;&#25215;&#25509;&#36807;&#26469;&#65292;&#19988;&#22914;&#26524;&#21521;&#20989;&#25968;&#30340;&#21629;&#21517;&#31354;&#38388;&#20013;&#28155;&#21152;&#26356;&#22810;&#40664;&#35748;&#24418;&#21442;&#65292;&#37027;&#20040;&#36825;&#20123;&#40664;&#35748;&#23454;&#21442;&#22312;&#36825;&#26465; using &#22768;&#26126;&#21487;&#35265;&#30340;&#20219;&#20309;&#20301;&#32622;&#22343;&#21487;&#35265;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> N <span class="br0">{</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw1">using</span> N<span class="sy4">::</span><span class="me2">f</span><span class="sy4">;</span>
<span class="kw4">void</span> g<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
f<span class="br0">(</span><span class="nu0">7</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(7, 1);</span>
f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;</span>
<span class="br0">}</span>
<span class="kw1">namespace</span> N <span class="br0">{</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">2</span>, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(2, 1);</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#23545;&#40664;&#35748;&#23454;&#21442;&#20013;&#20351;&#29992;&#30340;&#21517;&#23383;&#36827;&#34892;&#26597;&#25214;&#65292;&#26816;&#26597;<a href="cpp-language-access.html">&#21487;&#35775;&#38382;&#24615;</a>&#65292;&#24182;&#32465;&#23450;&#20110;&#22768;&#26126;&#28857;&#65292;&#20294;&#22312;&#20989;&#25968;&#35843;&#29992;&#28857;&#25165;&#25191;&#34892;&#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> a <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">int</span> g<span class="br0">(</span><span class="kw4">int</span> x <span class="sy1">=</span> f<span class="br0">(</span>a<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// f &#30340;&#26597;&#25214;&#25214;&#21040; ::f&#65292;a &#30340;&#26597;&#25214;&#25214;&#21040; ::a</span>
<span class="co1">// &#19981;&#20351;&#29992; ::a &#30340;&#20540;&#65292;&#23427;&#22312;&#36825;&#37324;&#26159; 1</span>
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
a <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="co1">// &#26356;&#25913; ::a &#30340;&#20540;</span>
<span class="br0">{</span>
<span class="kw4">int</span> a <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span>
g<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(2)&#65292;&#28982;&#21518;&#20197;&#23427;&#30340;&#32467;&#26524;&#35843;&#29992; g()</span>
<span class="br0">}</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#23545;&#20110;&#38750;&#27169;&#26495;&#31867;&#30340;<a href="cpp-language-member_functions.html">&#25104;&#21592;&#20989;&#25968;</a>&#65292;&#31867;&#22806;&#30340;&#23450;&#20041;&#20013;&#20801;&#35768;&#20986;&#29616;&#40664;&#35748;&#23454;&#21442;&#65292;&#24182;&#19982;&#31867;&#20307;&#20869;&#30340;&#22768;&#26126;&#25152;&#25552;&#20379;&#30340;&#40664;&#35748;&#23454;&#21442;&#32452;&#21512;&#12290;&#22914;&#26524;&#31867;&#22806;&#30340;&#40664;&#35748;&#23454;&#21442;&#20250;&#20351;&#25104;&#21592;&#20989;&#25968;&#21464;&#25104;&#40664;&#35748;&#12289;&#22797;&#21046;&#25110;&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;&#65292;&#37027;&#20040;&#31243;&#24207;&#38750;&#33391;&#26500;&#12290;&#23545;&#20110;&#31867;&#27169;&#26495;&#30340;&#25104;&#21592;&#20989;&#25968;&#65292;&#25152;&#26377;&#40664;&#35748;&#23454;&#21442;&#24517;&#39035;&#22312;&#25104;&#21592;&#20989;&#25968;&#30340;&#21021;&#22987;&#22768;&#26126;&#22788;&#25552;&#20379;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> C <span class="br0">{</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">3</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">void</span> g<span class="br0">(</span><span class="kw4">int</span> i, <span class="kw4">int</span> j <span class="sy1">=</span> <span class="nu0">99</span><span class="br0">)</span><span class="sy4">;</span>
C<span class="br0">(</span><span class="kw4">int</span> arg<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38750;&#40664;&#35748;&#26500;&#36896;&#20989;&#25968;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> C<span class="sy4">::</span><span class="me2">f</span><span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">3</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// &#38169;&#35823;&#65306;&#40664;&#35748;&#23454;&#21442;&#24050;&#25351;&#23450;&#20110;&#31867;&#20316;&#29992;&#22495;</span>
<span class="br0">}</span>
<span class="kw4">void</span> C<span class="sy4">::</span><span class="me2">g</span><span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">88</span>, <span class="kw4">int</span> j<span class="br0">)</span> <span class="br0">{</span> <span class="co1">// OK&#65306;&#27492;&#32763;&#35793;&#21333;&#20803;&#20013;&#65292;&#21487;&#26080;&#23454;&#21442;&#35843;&#29992; C::g</span>
<span class="br0">}</span>
C<span class="sy4">::</span><span class="me2">C</span><span class="br0">(</span><span class="kw4">int</span> arg <span class="sy1">=</span> <span class="nu0">1</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// &#38169;&#35823;&#65306;&#20351;&#20043;&#21464;&#25104;&#20102;&#40664;&#35748;&#26500;&#36896;&#20989;&#25968;</span>
<span class="br0">}</span></pre></div>
</div>
<p><a href="cpp-language-virtual.html">&#34394;</a>&#20989;&#25968;&#30340;&#35206;&#30422;&#20989;&#25968;&#19981;&#20250;&#20174;&#22522;&#31867;&#23450;&#20041;&#33719;&#24471;&#40664;&#35748;&#23454;&#21442;&#65292;&#32780;&#22312;&#36827;&#34892;&#34394;&#20989;&#25968;&#35843;&#29992;&#26102;&#65292;&#40664;&#35748;&#23454;&#21442;&#26681;&#25454;&#23545;&#35937;&#30340;&#38745;&#24577;&#31867;&#22411;&#30830;&#23450;&#65288;&#27880;&#24847;&#65306;&#36825;&#21487;&#20197;&#36890;&#36807;<a rel="nofollow" class="external text" href="http://www.gotw.ca/publications/mill18.htm">&#38750;&#34394;&#25509;&#21475;</a>&#27169;&#24335;&#36991;&#20813;&#65289;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> Base <span class="br0">{</span>
<span class="kw1">virtual</span> <span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> a <span class="sy1">=</span> <span class="nu0">7</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> Derived <span class="sy4">:</span> Base <span class="br0">{</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> a<span class="br0">)</span> override<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> m<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
Derived d<span class="sy4">;</span>
Base<span class="sy3">&amp;</span> b <span class="sy1">=</span> d<span class="sy4">;</span>
b.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#35843;&#29992; Derived::f(7) </span>
d.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#27809;&#26377;&#40664;&#35748;&#23454;&#21442;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#40664;&#35748;&#23454;&#21442;&#20013;&#19981;&#20801;&#35768;&#20351;&#29992;&#23616;&#37096;&#21464;&#37327;<span class="t-rev-inl t-since-cxx14"><span>&#65292;&#38500;&#38750;&#29992;&#20110;&#19981;&#27714;&#20540;&#35821;&#22659;&#20013;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span>&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
<span class="kw4">extern</span> <span class="kw4">void</span> g<span class="br0">(</span><span class="kw4">int</span> x <span class="sy1">=</span> n<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#23616;&#37096;&#21464;&#37327;&#19981;&#33021;&#20026;&#40664;&#35748;</span>
<span class="kw4">extern</span> <span class="kw4">void</span> h<span class="br0">(</span><span class="kw4">int</span> x <span class="sy1">=</span> sizeof n<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// CWG 2082 &#36215; OK</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#40664;&#35748;&#23454;&#21442;&#20013;&#19981;&#20801;&#35768; <a href="cpp-language-this.html"><code>this</code></a> &#25351;&#38024;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> A <span class="br0">{</span>
<span class="kw4">void</span> f<span class="br0">(</span>A<span class="sy2">*</span> p <span class="sy1">=</span> this<span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#20801;&#35768; this</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#40664;&#35748;&#23454;&#21442;&#20013;&#19981;&#20801;&#35768;&#20351;&#29992;&#38750;&#38745;&#24577;&#30340;&#31867;&#25104;&#21592;&#65288;&#21363;&#20351;&#23427;&#20204;&#19981;&#34987;&#27714;&#20540;&#65289;&#65292;&#38500;&#38750;&#29992;&#20110;&#26500;&#25104;&#25104;&#21592;&#25351;&#38024;&#25110;&#22312;&#25104;&#21592;&#35775;&#38382;&#34920;&#36798;&#24335;&#20013;&#20351;&#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> b<span class="sy4">;</span>
<span class="kw1">class</span> X <span class="br0">{</span>
<span class="kw4">int</span> a<span class="sy4">;</span>
<span class="kw4">int</span> mem1<span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> a<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#33021;&#20351;&#29992;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;</span>
<span class="kw4">int</span> mem2<span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> b<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#26597;&#25214;&#25214;&#21040;&#38745;&#24577;&#25104;&#21592; X::b</span>
<span class="kw4">static</span> <span class="kw4">int</span> b<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#40664;&#35748;&#23454;&#21442;&#20013;&#19981;&#20801;&#35768;&#20351;&#29992;&#20989;&#25968;&#24418;&#21442;<span class="t-rev-inl t-until-cxx14"><span>&#65288;&#21363;&#20351;&#23427;&#20204;&#19981;&#34987;&#27714;&#20540;&#65289;</span> <span><span class="t-mark-rev t-until-cxx14">(C++14 &#21069;)</span></span></span><span class="t-rev-inl t-since-cxx14"><span>&#38500;&#38750;&#23427;&#20204;&#19981;&#34987;&#27714;&#20540;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span>&#12290;&#27880;&#24847;&#65292;&#24418;&#21442;&#21015;&#34920;&#20013;&#36739;&#26089;&#20986;&#29616;&#30340;&#24418;&#21442;&#24050;&#22312;<a href="cpp-language-scope.html">&#20316;&#29992;&#22495;</a>&#20013;&#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> a<span class="sy4">;</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw4">int</span> a, <span class="kw4">int</span> b <span class="sy1">=</span> a<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#24418;&#21442;&#29992;&#20316;&#40664;&#35748;&#23454;&#21442;</span>
<span class="kw4">int</span> g<span class="br0">(</span><span class="kw4">int</span> a, <span class="kw4">int</span> b <span class="sy1">=</span> sizeof a<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// CWG 2082 &#21069;&#38169;&#35823;</span>
<span class="co1">// CWG 2082 &#21518; OK&#65306;&#21487;&#20197;&#29992;&#20110;&#19981;&#27714;&#20540;&#35821;&#22659;</span></pre></div>
</div>
<p>&#40664;&#35748;&#23454;&#21442;&#19981;&#26159;&#20989;&#25968;&#31867;&#22411;&#30340;&#19968;&#37096;&#20998;&#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> f<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">int</span> j <span class="sy1">=</span> f<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">int</span> k <span class="sy1">=</span> f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35843;&#29992; f(0);</span>
<span class="br0">}</span>
<span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span>p1<span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="sy1">=</span> <span class="sy3">&amp;</span>f<span class="sy4">;</span>
<span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span>p2<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="sy3">&amp;</span>f<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;f &#30340;&#31867;&#22411;&#26159; int(int)</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<p>&#22914;&#26524; <a href="cpp-language-lambda.html">lambda &#34920;&#36798;&#24335;</a>&#22312;&#40664;&#35748;&#23454;&#21442;&#20013;&#20986;&#29616;&#65292;&#37027;&#20040;&#23427;&#19981;&#33021;&#26174;&#24335;&#25110;&#38544;&#24335;&#25429;&#33719;&#20219;&#20309;&#20869;&#23481;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">void</span> f2<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">void</span> g1<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="br0">(</span><span class="br0">[</span>i<span class="br0">]</span><span class="br0">{</span> <span class="kw1">return</span> i<span class="sy4">;</span> <span class="br0">}</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#26377;&#25429;&#33719;&#20869;&#23481;</span>
<span class="kw4">void</span> g2<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="br0">(</span><span class="br0">[</span>i<span class="br0">]</span><span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#26377;&#25429;&#33719;&#20869;&#23481;</span>
<span class="kw4">void</span> g3<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="br0">(</span><span class="br0">[</span><span class="sy1">=</span><span class="br0">]</span><span class="br0">{</span> <span class="kw1">return</span> i<span class="sy4">;</span> <span class="br0">}</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#26377;&#25429;&#33719;&#20869;&#23481;</span>
<span class="kw4">void</span> g4<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="br0">(</span><span class="br0">[</span><span class="sy1">=</span><span class="br0">]</span><span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#26080;&#25429;&#33719;</span>
<span class="kw4">void</span> g5<span class="br0">(</span><span class="kw4">int</span> <span class="sy1">=</span> <span class="br0">(</span><span class="br0">[</span><span class="br0">]</span><span class="br0">{</span> <span class="kw1">return</span> sizeof i<span class="sy4">;</span> <span class="br0">}</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#26080;&#25429;&#33719;</span>
<span class="br0">}</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<p>&#38500;&#20102;&#20989;&#25968;&#35843;&#29992;&#36816;&#31639;&#31526;&#22806;&#65292;&#36816;&#31639;&#31526;&#20989;&#25968;&#19981;&#33021;&#26377;&#40664;&#35748;&#21442;&#25968;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> C <span class="br0">{</span>
<span class="kw4">int</span> operator<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">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38750;&#33391;&#26500;</span>
<span class="kw4">int</span> operator<span class="br0">(</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> x <span class="sy1">=</span> <span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E7.BC.BA.E9.99.B7.E6.8A.A5.E5.91.8A">&#32570;&#38519;&#25253;&#21578;</span></h3>
<p>&#19979;&#21015;&#26356;&#25913;&#34892;&#20026;&#30340;&#32570;&#38519;&#25253;&#21578;&#36861;&#28335;&#22320;&#24212;&#29992;&#20110;&#20197;&#21069;&#20986;&#29256;&#30340; C++ &#26631;&#20934;&#12290;</p>
<table class="dsctable" style="font-size:0.8em">
<tr>
<th>DR</th>
<th>&#24212;&#29992;&#20110;</th>
<th>&#20986;&#29256;&#26102;&#30340;&#34892;&#20026;</th>
<th>&#27491;&#30830;&#34892;&#20026;</th>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue2082">CWG 2082</a></td>
<td>C++14</td>
<td>&#26366;&#31105;&#27490;&#40664;&#35748;&#23454;&#21442;&#22312;&#19981;&#27714;&#20540;&#35821;&#22659;&#20013;&#20351;&#29992;&#23616;&#37096;&#21464;&#37327;</td>
<td>&#20801;&#35768;&#22312;&#19981;&#27714;&#20540;&#35821;&#22659;&#20013;&#20351;&#29992;</td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>