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

161 lines
14 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>&#37325;&#36733;&#20989;&#25968;&#30340;&#22320;&#22336;</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_overloaded_address skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#37325;&#36733;&#20989;&#25968;&#30340;&#22320;&#22336;</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>&#38500;&#20102;<a href="cpp-language-operator_other.html">&#20989;&#25968;&#35843;&#29992;&#34920;&#36798;&#24335;</a>&#20043;&#22806;&#65292;&#37325;&#36733;&#20989;&#25968;&#30340;&#21517;&#23383;&#36824;&#21487;&#20197;&#20986;&#29616;&#22312;&#19979;&#21015; 7 &#31181;&#21457;&#29983;<a href="cpp-language-overload_resolution.html">&#37325;&#36733;&#20915;&#35758;</a>&#30340;&#35821;&#22659;&#20013;&#65306;</p>
<div class="t-li1"><span class="t-li">1)</span> &#23545;&#35937;&#25110;<a href="cpp-language-reference_initialization.html">&#24341;&#29992;</a><a href="cpp-language-declarations.html">&#22768;&#26126;</a>&#20013;&#30340;<a href="cpp-language-initialization.html">&#21021;&#22987;&#21270;&#22120;</a></div>
<div class="t-li1"><span class="t-li">2)</span> &#36171;&#20540;&#36816;&#31639;&#31526;&#30340;&#21491;&#20391;</div>
<div class="t-li1"><span class="t-li">3)</span> &#20316;&#20026;&#20989;&#25968;&#35843;&#29992;&#30340;&#23454;&#21442;</div>
<div class="t-li1"><span class="t-li">4)</span> &#20316;&#20026;&#29992;&#25143;&#23450;&#20041;&#36816;&#31639;&#31526;&#30340;&#23454;&#21442;</div>
<div class="t-li1"><span class="t-li">5)</span> <a href="cpp-language-return.html"><code>return</code></a> &#35821;&#21477;</div>
<div class="t-li1"><span class="t-li">6)</span> <a href="cpp-language-explicit_cast.html">&#26174;&#24335;&#36716;&#22411;</a>&#25110; <a href="cpp-language-static_cast.html"><code>static_cast</code></a> &#30340;&#23454;&#21442;</div>
<div class="t-li1"><span class="t-li">7)</span> &#38750;&#31867;&#22411;<a href="cpp-language-template_parameters.html">&#27169;&#26495;&#23454;&#21442;</a></div>
<p>&#22312;&#27599;&#20010;&#35821;&#22659;&#20013;&#65292;&#37325;&#36733;&#20989;&#25968;&#30340;&#21517;&#23383;&#21487;&#20197;&#21069;&#38468;&#21462;&#22336;&#36816;&#31639;&#31526; <code><b>&amp;</b></code> &#24182;&#19988;&#21487;&#20197;&#34987;&#19968;&#32452;&#20887;&#20313;&#30340;&#25324;&#21495;&#25152;&#29615;&#32469;&#12290;</p>
<p>&#22312;&#25152;&#26377;&#36825;&#20123;&#35821;&#22659;&#20013;&#65292;&#20174;&#37325;&#36733;&#38598;&#20013;&#36873;&#25321;&#30340;&#20989;&#25968;&#65292;&#26159;&#20854;&#31867;&#22411;&#19982;<i>&#30446;&#26631;</i>&#25152;&#26399;&#24453;&#30340;&#20989;&#25968;&#25351;&#38024;&#12289;&#20989;&#25968;&#24341;&#29992;&#25110;&#25104;&#21592;&#20989;&#25968;&#25351;&#38024;&#31867;&#22411;&#30456;&#21305;&#37197;&#30340;&#20989;&#25968;&#65292;<i>&#30446;&#26631;</i>&#20998;&#21035;&#20026;&#65306;&#34987;&#21021;&#22987;&#21270;&#30340;&#23545;&#35937;&#25110;&#24341;&#29992;&#65292;&#36171;&#20540;&#30340;&#24038;&#20391;&#65292;&#20989;&#25968;&#25110;&#36816;&#31639;&#31526;&#30340;&#24418;&#21442;&#65292;&#20989;&#25968;&#30340;&#36820;&#22238;&#31867;&#22411;&#65292;&#36716;&#22411;&#30340;&#30446;&#26631;&#31867;&#22411;&#65292;&#20197;&#21450;&#27169;&#26495;&#24418;&#21442;&#30340;&#31867;&#22411;&#12290;</p>
<p>&#20989;&#25968;&#30340;&#24418;&#21442;&#31867;&#22411;&#21644;&#36820;&#22238;&#31867;&#22411;&#24517;&#39035;&#19982;&#30446;&#26631;&#20005;&#26684;&#21305;&#37197;&#65292;&#19981;&#32771;&#34385;&#38544;&#24335;&#36716;&#25442;&#65288;&#20363;&#22914;&#65292;&#22312;&#21021;&#22987;&#21270;&#25351;&#21521;&#36820;&#22238;&#22522;&#31867;&#25351;&#38024;&#30340;&#20989;&#25968;&#30340;&#25351;&#38024;&#26102;&#65292;&#19981;&#20250;&#36873;&#25321;&#36820;&#22238;&#27966;&#29983;&#31867;&#25351;&#38024;&#30340;&#20989;&#25968;&#65289;&#12290;</p>
<p>&#22914;&#26524;&#20989;&#25968;&#21517;&#25351;&#21517;&#20102;&#26576;&#20010;&#20989;&#25968;&#27169;&#26495;&#65292;&#37027;&#20040;&#39318;&#20808;&#36827;&#34892;<a href="cpp-language-template_argument_deduction.html">&#27169;&#26495;&#23454;&#21442;&#25512;&#23548;</a>&#65292;&#19988;&#22914;&#26524;&#23427;&#25104;&#21151;&#65292;&#37027;&#20040;&#23558;&#20250;&#29983;&#25104;&#19968;&#20010;&#21333;&#29420;&#30340;&#27169;&#26495;&#29305;&#21270;&#24182;&#28155;&#21152;&#21040;&#25152;&#35201;&#32771;&#34385;&#30340;&#37325;&#36733;&#38598;&#21512;&#20013;&#12290;<span class="t-rev-inl t-since-cxx20"><span>&#20174;&#38598;&#21512;&#20013;&#20002;&#24323;&#25152;&#26377;&#19981;&#28385;&#36275;&#20854;&#20851;&#32852;<a href="cpp-language-constraints.html">&#32422;&#26463;</a>&#30340;&#20989;&#25968;&#12290;</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span>&#22914;&#26524;&#38598;&#21512;&#20013;&#26377;&#22810;&#20110;&#19968;&#20010;&#20989;&#25968;&#19982;&#30446;&#26631;&#21305;&#37197;&#65292;&#19988;&#33267;&#23569;&#19968;&#20010;&#20989;&#25968;&#26159;&#38750;&#27169;&#26495;&#65292;&#37027;&#20040;&#20174;&#32771;&#34385;&#38598;&#21512;&#20013;&#21435;&#38500;&#27169;&#26495;&#29305;&#21270;&#12290;<span class="t-rev-inl t-since-cxx20"><span>&#23545;&#20110;&#20219;&#20309;&#19968;&#23545;&#38750;&#27169;&#26495;&#20989;&#25968;&#65292;&#22914;&#26524;&#20854;&#20013;&#19968;&#20010;&#27604;&#21478;&#19968;&#20010;<a href="cpp-language-constraints.html">&#26356;&#21463;&#32422;&#26463;</a>&#65292;&#37027;&#20040;&#20174;&#38598;&#21512;&#20013;&#20002;&#24323;&#21463;&#36739;&#23569;&#32422;&#26463;&#30340;&#20989;&#25968;&#12290;</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span>&#22914;&#26524;&#25152;&#26377;&#21097;&#20313;&#20505;&#36873;&#32773;&#37117;&#26159;&#27169;&#26495;&#29305;&#21270;&#65292;&#37027;&#20040;&#24403;&#23384;&#22312;&#26356;&#29305;&#27530;&#30340;&#27169;&#26495;&#29305;&#21270;&#26102;&#65292;&#31227;&#38500;<a href="cpp-language-partial_specialization.html">&#36739;&#19981;&#29305;&#27530;</a>&#32773;&#12290;&#22914;&#26524;&#22312;&#21508;&#39033;&#31227;&#38500;&#20043;&#21518;&#36824;&#26377;&#22810;&#20110;&#19968;&#20010;&#20505;&#36873;&#32773;&#65292;&#37027;&#20040;&#31243;&#24207;&#38750;&#33391;&#26500;&#12290;</p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</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="kw4">int</span> f<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">void</span> g<span class="br0">(</span> <span class="kw4">int</span><span class="br0">(</span><span class="sy3">&amp;</span>f1<span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span>, <span class="kw4">int</span><span class="br0">(</span><span class="sy2">*</span>f2<span class="br0">)</span><span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="kw1">template</span><span class="sy1">&lt;</span> <span class="kw4">int</span><span class="br0">(</span><span class="sy2">*</span>F<span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="sy1">&gt;</span>
<span class="kw1">struct</span> Templ <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> Foo <span class="br0">{</span>
<span class="kw4">int</span> mf<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">3</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> mf<span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">4</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> Emp <span class="br0">{</span>
<span class="kw4">void</span> operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">double</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="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// 1. &#21021;&#22987;&#21270;</span>
<span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span>pf<span class="br0">)</span><span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span> <span class="sy1">=</span> f<span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int f(double)</span>
<span class="kw4">int</span> <span class="br0">(</span><span class="sy3">&amp;</span>rf<span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="sy1">=</span> f<span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int f(int)</span>
<span class="kw4">int</span> <span class="br0">(</span>Foo<span class="sy4">::</span><span class="sy2">*</span>mpf<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>Foo<span class="sy4">::</span><span class="me2">mf</span><span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int mf(int)</span>
<span class="co1">// 2. &#36171;&#20540;</span>
pf <span class="sy1">=</span> nullptr<span class="sy4">;</span>
pf <span class="sy1">=</span> <span class="sy3">&amp;</span>f<span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int f(double)</span>
<span class="co1">// 3. &#20989;&#25968;&#23454;&#21442;</span>
g<span class="br0">(</span>f, f<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20026;&#31532;&#19968;&#23454;&#21442;&#36873;&#25321; int f(int)</span>
<span class="co1">// &#20026;&#31532;&#20108;&#23454;&#21442;&#36873;&#25321; int f(double)</span>
<span class="co1">// 4. &#29992;&#25143;&#23450;&#20041;&#36816;&#31639;&#31526;</span>
Emp<span class="br0">{</span><span class="br0">}</span> <span class="sy1">&lt;&lt;</span> f<span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int f(double)</span>
<span class="co1">// 5. &#36820;&#22238;&#20540;</span>
<span class="kw4">auto</span> foo <span class="sy1">=</span> <span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> <span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">return</span> f<span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int f(int)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// 6. &#36716;&#22411;</span>
<span class="kw4">auto</span> p <span class="sy1">=</span> <span class="kw1">static_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy1">&gt;</span><span class="br0">(</span>f<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int f(int)</span>
<span class="co1">// 7. &#27169;&#26495;&#23454;&#21442;</span>
Templ<span class="sy1">&lt;</span>f<span class="sy1">&gt;</span> t<span class="sy4">;</span> <span class="co1">// &#36873;&#25321; int f(int)</span>
<span class="br0">}</span></pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">&#24341;&#29992;</span></h3>
<div class="t-ref-std-c++20">
<ul>
<li>C++20 &#26631;&#20934;&#65288;ISO/IEC 14882:2020&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>12.5 Address of overloaded function [over.over]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++17">
<ul>
<li>C++17 &#26631;&#20934;&#65288;ISO/IEC 14882:2017&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>16.4 Address of overloaded function [over.over]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++14">
<ul>
<li>C++14 &#26631;&#20934;&#65288;ISO/IEC 14882:2014&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>13.4 Address of overloaded function [over.over]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++11">
<ul>
<li>C++11 &#26631;&#20934;&#65288;ISO/IEC 14882:2011&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>13.4 Address of overloaded function [over.over]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++03">
<ul>
<li>C++03 &#26631;&#20934;&#65288;ISO/IEC 14882:2003&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>13.4 Address of overloaded function [over.over]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++98">
<ul>
<li>C++98 &#26631;&#20934;&#65288;ISO/IEC 14882:1998&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>13.4 Address of overloaded function [over.over]</li>
</ul>
</dd>
</dl>
</div>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>