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

222 lines
30 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>&#32763;&#35793;&#21333;&#20803;&#23616;&#37096;&#23454;&#20307; (C++20 &#36215;)</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_tu_local skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#32763;&#35793;&#21333;&#20803;&#23616;&#37096;&#23454;&#20307; <span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></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>&#32763;&#35793;&#21333;&#20803;&#23616;&#37096;&#65288; TU &#23616;&#37096;&#65289;&#23454;&#20307;&#26159;&#20026;&#38459;&#27490;&#20551;&#23450;&#20026;&#23616;&#37096;&#65288;&#19981;&#29992;&#20110;&#20219;&#20309;&#20854;&#20182;&#32763;&#35793;&#21333;&#20803;&#65289;&#30340;&#23454;&#20307;&#26292;&#38706;&#19988;&#29992;&#20110;&#20854;&#20182;&#32763;&#35793;&#21333;&#20803;&#32780;&#24341;&#20837;&#30340;&#12290;</p>
<p>&#26469;&#33258;<a rel="nofollow" class="external text" href="https://vector-of-bool.github.io/2019/03/31/modules-2.html">&#20102;&#35299; C++ &#27169;&#22359;&#65306;&#37096;&#20998; 2</a> &#30340;&#20363;&#23376;&#25551;&#32472;&#20102;&#19981;&#32422;&#26463;&#26292;&#38706;&#30340;&#38382;&#39064;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// &#26080; TU &#23616;&#37096;&#32422;&#26463;&#30340;&#27169;&#22359;&#21333;&#20803;</span>
export module Foo<span class="sy4">;</span>
import <span class="sy1">&lt;</span>iostream<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">namespace</span> <span class="br0">{</span>
<span class="kw1">class</span> LolWatchThis <span class="br0">{</span> <span class="co1">// &#20869;&#37096;&#38142;&#25509;&#65292;&#19981;&#33021;&#23548;&#20986;</span>
<span class="kw4">static</span> <span class="kw4">void</span> say_hello<span class="br0">(</span><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;Hello, everyone!<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span>
export LolWatchThis lolwut<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// LolWatchThis &#34987;&#26292;&#38706;&#20026;&#36820;&#22238;&#31867;&#22411;</span>
<span class="kw1">return</span> LolWatchThis<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// main.cpp</span>
import Foo<span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">auto</span> evil <span class="sy1">=</span> lolwut<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#39;evil&#39; &#25317;&#26377; &#39;LolWatchThis&#39; &#31867;&#22411;</span>
decltype<span class="br0">(</span>evil<span class="br0">)</span><span class="sy4">::</span><span class="me2">say_hello</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#39;LolWatchThis&#39; &#30340;&#23450;&#20041;&#19981;&#20877;&#20026;&#20869;&#37096;</span>
<span class="br0">}</span></pre></div>
</div>
<h3><span class="mw-headline" id="TU_.E5.B1.80.E9.83.A8.E5.AE.9E.E4.BD.93">TU &#23616;&#37096;&#23454;&#20307;</span></h3>
<p>&#19968;&#20010;&#23454;&#20307;&#20026; <i>TU &#23616;&#37096;</i>&#65292;&#33509;&#23427;&#20026;</p>
<ol>
<li>&#31867;&#22411;&#12289;&#20989;&#25968;&#12289;&#21464;&#37327;&#25110;&#27169;&#26495;&#65292;&#19988;
<ol>
<li>&#25317;&#26377;&#24102;<a href="cpp-language-storage_duration.html#.E5.86.85.E9.83.A8.E8.BF.9E.E6.8E.A5">&#20869;&#37096;&#38142;&#25509;</a>&#30340;&#21517;&#23383;&#65292;&#25110;</li>
<li>&#26080;&#25317;&#26377;&#20869;&#37096;&#38142;&#25509;&#30340;&#21517;&#23383;&#65292;&#19988;&#22312; TU &#23616;&#37096;&#23454;&#20307;&#20043;&#20869;&#22768;&#26126;&#25110;&#30001; <a href="cpp-language-lambda.html">lambda &#34920;&#36798;&#24335;</a>&#24341;&#20837;&#12289;</li>
</ol>
</li>
<li>&#23450;&#20041;&#22312;<a href="cpp-language-class.html">&#31867;&#35828;&#26126;&#31526;</a>&#12289;&#20989;&#25968;&#20307;&#25110;&#21021;&#22987;&#21270;&#22120;&#22806;&#65292;&#25110;&#30001;&#29992;&#20110;&#22768;&#26126;&#20165; TU &#23616;&#37096;&#23454;&#20307;&#30340;&#23450;&#20041;&#31867;&#22411;&#35828;&#26126;&#31526;&#65288;&#31867;&#22411;&#35828;&#26126;&#31526;&#12289;&#31867;&#35828;&#26126;&#31526;&#25110;&#26522;&#20030;&#35828;&#26126;&#31526;&#65289;&#24341;&#20837;&#12289;</li>
<li>TU &#23616;&#37096;&#27169;&#26495;&#30340;&#29305;&#21270;&#12289;</li>
<li>&#26377;&#20219;&#20309; TU &#23616;&#37096;&#27169;&#26495;&#23454;&#21442;&#30340;&#27169;&#26495;&#29305;&#21270;&#65292;&#25110;</li>
<li>&#20854;&#22768;&#26126;&#20026;&#26292;&#38706;&#65288;&#23450;&#20041;&#21518;&#36848;&#65289;&#30340;&#65288;&#21487;&#33021;&#23454;&#20363;&#21270;&#30340;&#65289;&#27169;&#26495;&#29305;&#21270;&#12290;</li>
</ol>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// &#25317;&#26377;&#20869;&#37096;&#38142;&#25509;&#30340; TU &#23616;&#37096;&#23454;&#20307;</span>
<span class="kw1">namespace</span> <span class="br0">{</span> <span class="co1">// &#22768;&#26126;&#20110;&#26080;&#21517;&#21629;&#21517;&#31354;&#38388;&#30340;&#25152;&#26377;&#21517;&#23383;&#22343;&#25317;&#26377;&#20869;&#37096;&#38142;&#25509;</span>
<span class="kw4">int</span> tul_var <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#21464;&#37327;</span>
<span class="kw4">int</span> tul_func<span class="br0">(</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="co1">// TU &#23616;&#37096;&#20989;&#25968;</span>
<span class="kw1">struct</span> tul_type <span class="br0">{</span> <span class="kw4">int</span> mem<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#65288;&#31867;&#65289;&#31867;&#22411;</span>
<span class="br0">}</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw4">static</span> <span class="kw4">int</span> tul_func_temp<span class="br0">(</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="co1">// TU &#23616;&#37096;&#27169;&#26495;</span>
<span class="co1">// TU &#23616;&#37096;&#27169;&#26495;&#29305;&#21270;</span>
<span class="kw1">template</span><span class="sy1">&lt;&gt;</span>
<span class="kw4">static</span> <span class="kw4">int</span> tul_func_temp<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="br0">(</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="co1">// TU &#23616;&#37096;&#29305;&#21270;</span>
<span class="co1">// &#26377; TU &#23616;&#37096;&#27169;&#26495;&#23454;&#21442;&#30340;&#27169;&#26495;&#29305;&#21270;</span>
<span class="kw1">template</span> <span class="sy1">&lt;&gt;</span> <span class="kw1">struct</span> <a href="cpp-utility-hash.html"><span class="kw1124">std::<span class="me2">hash</span></span></a><span class="sy1">&lt;</span>tul_type<span class="sy1">&gt;</span> <span class="br0">{</span> <span class="co1">// TU &#23616;&#37096;&#29305;&#21270;</span>
<a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> operator<span class="br0">(</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">const</span> tul_type<span class="sy3">&amp;</span> t<span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="kw1">return</span> 4u<span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#32570;&#23569;&#35268;&#21017; #1.2&#12289; #2 &#21450; #5 &#30340;&#31034;&#20363;</td>
</tr>
</table>
<p>&#20540;&#25110;&#23545;&#35937;&#20026; <i>TU &#23616;&#37096;</i>&#65292;&#33509;&#23427;</p>
<ol>
<li>&#26159; TU &#23616;&#37096;&#30340;&#20989;&#25968;&#25110;&#19982; TU &#23616;&#37096;&#21464;&#37327;&#20851;&#32852;&#30340;&#23545;&#35937;&#65292;&#25110;&#26159;&#25351;&#21521;&#23427;&#30340;&#25351;&#38024;&#65292;&#25110;&#32773;</li>
<li>&#26159;&#31867;&#25110;&#25968;&#32452;&#31867;&#22411;&#23545;&#35937;&#65292;&#32780;&#20854;&#20219;&#19968;<a href="cpp-language-object.html#.E5.AD.90.E5.AF.B9.E8.B1.A1">&#23376;&#23545;&#35937;</a>&#65292;&#25110;&#20854;&#24341;&#29992;&#31867;&#22411;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#25152;&#24341;&#29992;&#30340;&#23545;&#35937;&#25110;&#20989;&#25968;&#65292;&#20026; TU &#23616;&#37096;&#24182;&#19988;<a href="cpp-language-constant_expression.html#.E5.8F.AF.E7.94.A8.E4.BA.8E.E5.B8.B8.E9.87.8F.E8.A1.A8.E8.BE.BE.E5.BC.8F">&#21487;&#29992;&#20110;&#24120;&#37327;&#34920;&#36798;&#24335;</a>&#12290;</li>
</ol>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">static</span> <span class="kw4">int</span> tul_var <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#21464;&#37327;</span>
<span class="kw4">static</span> <span class="kw4">int</span> tul_func<span class="br0">(</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="co1">// TU &#23616;&#37096;&#20989;&#25968;</span>
<span class="kw4">int</span><span class="sy2">*</span> tul_var_ptr <span class="sy1">=</span> <span class="sy3">&amp;</span>tul_var<span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#65306;&#25351;&#21521; TU &#23616;&#37096;&#21464;&#37327;&#30340;&#25351;&#38024;</span>
<span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span> tul_func_ptr<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="sy3">&amp;</span>tul_func<span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#65306;&#25351;&#21521; TU &#23616;&#37096;&#20989;&#25968;&#30340;&#25351;&#38024;</span>
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">int</span> tul_const <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#21464;&#37327;&#21487;&#29992;&#20110;&#24120;&#37327;&#34920;&#36798;&#24335;</span>
<span class="kw4">int</span> tul_arr<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span> tul_const <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#65306; constexpr TU &#23616;&#37096;&#23545;&#35937;&#30340;&#25968;&#32452;</span>
<span class="kw1">struct</span> tul_class <span class="br0">{</span> <span class="kw4">int</span> mem<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
tul_class tul_obj<span class="br0">{</span>tul_const<span class="br0">}</span><span class="sy4">;</span> <span class="co1">// TU &#23616;&#37096;&#65306;&#25317;&#26377;&#25104;&#21592; constexpr TU &#23616;&#37096;&#23545;&#35937;</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E6.9A.B4.E9.9C.B2">&#26292;&#38706;</span></h3>
<p>&#22768;&#26126; D <i>&#25351;&#21517;</i>&#23454;&#20307; E &#65292;&#33509;</p>
<ol>
<li>D &#21547;&#26377;&#38381;&#21253;&#31867;&#22411;&#20026; E &#30340; lambda &#34920;&#36798;&#24335;&#12289;</li>
<li>E &#19981;&#26159;&#20989;&#25968;&#25110;&#20989;&#25968;&#27169;&#26495;&#19988; D &#21547;&#26377;&#25351;&#20195; E &#30340;&#26631;&#35782;&#34920;&#36798;&#24335;&#12289;&#31867;&#22411;&#35828;&#26126;&#31526;&#12289;&#23884;&#22871;&#31867;&#22411;&#35828;&#26126;&#31526;&#12289;&#27169;&#26495;&#21517;&#25110;&#27010;&#24565;&#21517;&#65292;&#25110;</li>
<li>E &#26159;&#20989;&#25968;&#25110;&#20989;&#25968;&#27169;&#26495;&#19988; D &#21547;&#26377;&#25351;&#21517; E &#30340;&#34920;&#36798;&#24335;&#25110;&#25351;&#20195;&#21547;&#26377; E &#30340;&#37325;&#36733;&#38598;&#30340;&#26631;&#35782;&#34920;&#36798;&#24335;&#12290;</li>
</ol>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// lambda &#25351;&#21517;</span>
<span class="kw4">auto</span> x <span class="sy1">=</span> <span class="br0">[</span><span class="br0">]</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#25351;&#21517; decltype(x)</span>
<span class="co1">// &#38750;&#20989;&#25968;&#65288;&#27169;&#26495;&#65289;&#25351;&#21517;</span>
<span class="kw4">int</span> y1 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#25351;&#21517; y1 &#65288;&#26631;&#35782;&#34920;&#36798;&#24335;&#65289;</span>
<span class="kw1">struct</span> y2 <span class="br0">{</span> <span class="kw4">int</span> mem<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
y2 y2_obj<span class="br0">{</span><span class="nu0">1</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#25351;&#21517; y2 &#65288;&#31867;&#22411;&#35828;&#26126;&#31526;&#65289;</span>
<span class="kw1">struct</span> y3 <span class="br0">{</span> <span class="kw4">int</span> mem_func<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> y3<span class="sy4">::</span><span class="me2">mem_func</span><span class="br0">(</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="co1">// &#25351;&#21517; y3 &#65288;&#23884;&#22871;&#31867;&#22411;&#35828;&#26126;&#31526;&#65289;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span> <span class="kw4">int</span> y4 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
<span class="kw4">int</span> var <span class="sy1">=</span> y4<span class="sy1">&lt;</span>y2<span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// &#25351;&#21517; y4 &#65288;&#27169;&#26495;&#21517;&#65289;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span> concept y5 <span class="sy1">=</span> <span class="kw2">true</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span> <span class="kw4">void</span> func<span class="br0">(</span>T<span class="sy3">&amp;&amp;</span><span class="br0">)</span> requires y5<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// &#25351;&#21517; y5 &#65288;&#27010;&#24565;&#21517;&#65289;</span>
<span class="co1">// &#20989;&#25968;&#65288;&#27169;&#26495;&#65289;&#25351;&#21517;</span>
<span class="kw4">int</span> z1<span class="br0">(</span><span class="kw4">int</span> arg<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;no overload&quot;</span><span class="sy4">;</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> z2<span class="br0">(</span><span class="kw4">int</span> arg<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;overload 1&quot;</span><span class="sy4">;</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> z2<span class="br0">(</span><span class="kw4">double</span> arg<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;overload 2&quot;</span><span class="sy4">;</span> <span class="kw1">return</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> val1 <span class="sy1">=</span> z1<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25351;&#21517; z1</span>
<span class="kw4">int</span> val2 <span class="sy1">=</span> z2<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25351;&#21517; z2 &#65288;int z2(int)&#65289;</span></pre></div>
</div>
<p>&#19968;&#20010;&#22768;&#26126;&#26159;<i>&#26292;&#38706;</i>&#65292;&#33509;&#23427;&#35201;&#20040;&#25351;&#21517;&#19968;&#20010; TU &#23616;&#37096;&#23454;&#20307;&#65292;&#19981;&#36807;&#24573;&#30053;</p>
<ol>
<li>&#38750; inline &#20989;&#25968;&#25110;&#20989;&#25968;&#27169;&#26495;&#30340;&#20989;&#25968;&#20307;&#65288;&#20294;&#38750;&#29992;<a href="cpp-language-auto.html">&#21344;&#20301;&#31526;&#31867;&#22411;</a>&#22768;&#26126;&#36820;&#22238;&#31867;&#22411;&#30340;&#20989;&#25968;&#30340;&#65288;&#21487;&#33021;&#23454;&#20363;&#21270;&#30340;&#65289;&#23450;&#20041;&#30340;&#25512;&#23548;&#36820;&#22238;&#31867;&#22411;&#65289;&#65292;</li>
<li>&#21464;&#37327;&#25110;&#21464;&#37327;&#27169;&#26495;&#30340;&#21021;&#22987;&#21270;&#22120;&#65288;&#20294;&#38750;&#21464;&#37327;&#31867;&#22411;&#65289;&#65292;</li>
<li>&#31867;&#23450;&#20041;&#20013;&#30340;&#21451;&#20803;&#22768;&#26126;&#65292;&#21450;</li>
<li>&#20219;&#20309;&#21040;&#25317;&#26377;&#20869;&#37096;&#38142;&#25509;&#25110;&#26080;&#38142;&#25509;&#30340;&#12289;&#20197;&#38750; <a href="cpp-language-definition.html#ODR_.E4.BD.BF.E7.94.A8">odr &#20351;&#29992;</a>&#30340;&#24120;&#37327;&#34920;&#36798;&#24335;&#21021;&#22987;&#21270;&#30340;&#38750; volatile &#30340; const &#23545;&#35937;&#25110;&#24341;&#29992;&#30340;&#24341;&#29992;&#65292;</li>
</ol>
<p>&#36825;&#20123;&#24773;&#20917;&#65292;&#35201;&#20040;&#23450;&#20041;&#20197; TU &#23616;&#37096;&#20540;&#21021;&#22987;&#21270;&#30340; constexpr &#21464;&#37327;&#12290;</p>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#32570;&#23569;&#26292;&#38706;&#30340;&#31034;&#20363;</td>
</tr>
</table>
<h3><span class="mw-headline" id="TU_.E5.B1.80.E9.83.A8.E7.BA.A6.E6.9D.9F">TU &#23616;&#37096;&#32422;&#26463;</span></h3>
<p>&#33509;<a href="cpp-language-modules.html">&#27169;&#22359;&#25509;&#21475;&#21333;&#20803;</a>&#65288;&#22312;&#21487;&#33021;&#26377;&#30340;&#31169;&#26377;&#27169;&#22359;&#29255;&#27573;&#22806;&#65289;&#25110;&#27169;&#22359;&#21010;&#20998;&#20013;&#30340;&#38750; TU &#23616;&#37096;&#23454;&#20307;&#30340;&#65288;&#21487;&#33021;&#23454;&#20363;&#21270;&#30340;&#65289;<a href="cpp-language-declarations.html">&#22768;&#26126;</a>&#25110;<a href="cpp-language-class_template_argument_deduction.html#.E7.B1.BB.E6.A8.A1.E6.9D.BF.E7.9A.84.E6.8E.A8.E5.AF.BC">&#25512;&#23548;&#25351;&#24341;</a>&#20026;&#26292;&#38706;&#65292;&#21017;&#31243;&#24207;&#38750;&#33391;&#26500;&#12290;&#36825;&#31181;&#22768;&#26126;&#22312;&#22312;&#20219;&#20309;&#20854;&#20182;&#35821;&#22659;&#20013;&#34987;&#24323;&#29992;&#12290;</p>
<p>&#33509;&#20986;&#29616;&#20110;&#19968;&#20010;&#32763;&#35793;&#21333;&#20803;&#20013;&#30340;&#22768;&#26126;&#25351;&#21517;&#22312;&#21478;&#19968;&#38750;&#22836;&#25991;&#20214;&#21333;&#20803;&#30340;&#32763;&#35793;&#21333;&#20803;&#20013;&#22768;&#26126;&#30340; TU &#23616;&#37096;&#23454;&#20307;&#65292;&#21017;&#31243;&#24207;&#38750;&#33391;&#26500;&#12290;&#20026;&#27169;&#26495;&#29305;&#21270;&#23454;&#20363;&#21270;&#30340;&#22768;&#26126;&#20986;&#29616;&#22312;&#29305;&#21270;&#30340;&#23454;&#20363;&#21270;&#28857;&#12290;</p>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#32570;&#23569;&#32422;&#26463;&#30340;&#31034;&#20363;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<p>&#32763;&#35793;&#21333;&#20803; #1&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1">export module A<span class="sy4">;</span>
<span class="kw4">static</span> <span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">void</span> it<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="br0">}</span> <span class="co1">// &#38169;&#35823;&#65306;&#20026; f &#30340;&#26292;&#38706;</span>
<span class="kw4">static</span> <span class="kw1">inline</span> <span class="kw4">void</span> its<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="br0">}</span> <span class="co1">// OK</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> <span class="kw4">void</span> g<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> its<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span> <span class="co1">// OK</span>
<span class="kw1">template</span> <span class="kw4">void</span> g<span class="sy1">&lt;</span><span class="nu0">0</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
decltype<span class="br0">(</span>f<span class="br0">)</span> <span class="sy2">*</span>fp<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306; f &#65288;&#23613;&#31649;&#19981;&#26159;&#20854;&#31867;&#22411;&#65289;&#20026; TU &#23616;&#37096;</span>
<span class="kw4">auto</span> <span class="sy3">&amp;</span>fr <span class="sy1">=</span> f<span class="sy4">;</span> <span class="co1">// OK</span>
<span class="kw4">constexpr</span> <span class="kw4">auto</span> <span class="sy3">&amp;</span>fr2 <span class="sy1">=</span> fr<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#20026; f &#30340;&#26292;&#38706;</span>
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">auto</span> fp2 <span class="sy1">=</span> fr<span class="sy4">;</span> <span class="co1">// OK</span>
<span class="kw1">struct</span> S <span class="br0">{</span> <span class="kw4">void</span> <span class="br0">(</span><span class="sy3">&amp;</span>ref<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span> s<span class="br0">{</span>f<span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK&#65306; value &#20026; TU &#23616;&#37096;</span>
<span class="kw4">constexpr</span> <span class="kw4">extern</span> <span class="kw1">struct</span> W <span class="br0">{</span> S <span class="sy3">&amp;</span>s<span class="sy4">;</span> <span class="br0">}</span> wrap<span class="br0">{</span>s<span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK&#65306; value &#38750; TU &#23616;&#37096; TU-local</span>
<span class="kw4">static</span> <span class="kw4">auto</span> x <span class="sy1">=</span> <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="br0">}</span><span class="sy4">;</span> <span class="co1">// OK</span>
<span class="kw4">auto</span> x2 <span class="sy1">=</span> x<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#38381;&#21253;&#31867;&#22411;&#20026; TU &#23616;&#37096;</span>
<span class="kw4">int</span> y <span class="sy1">=</span> <span class="br0">(</span><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="br0">}</span><span class="br0">(</span><span class="br0">)</span>,<span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#38381;&#21253;&#31867;&#22411;&#38750; TU &#23616;&#37096;</span>
<span class="kw4">int</span> y2 <span class="sy1">=</span> <span class="br0">(</span>x,<span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
<span class="kw1">namespace</span> N <span class="br0">{</span>
<span class="kw1">struct</span> A <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> adl<span class="br0">(</span>A<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">static</span> <span class="kw4">void</span> adl<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">void</span> adl<span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">inline</span> <span class="kw4">void</span> h<span class="br0">(</span><span class="kw4">auto</span> x<span class="br0">)</span> <span class="br0">{</span> adl<span class="br0">(</span>x<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span> <span class="co1">// OK &#65292;&#20294;&#29305;&#21270;&#21487;&#33021;&#20026;&#26292;&#38706;</span></pre></div>
</div>
<p>&#32763;&#35793;&#21333;&#20803; #2&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1">module A<span class="sy4">;</span>
<span class="kw4">void</span> other<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
g<span class="sy1">&lt;</span><span class="nu0">0</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#26174;&#24335;&#23454;&#20363;&#21270;&#29305;&#21270;</span>
g<span class="sy1">&lt;</span><span class="nu0">1</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#23454;&#20363;&#21270;&#20351;&#29992;&#20854; TU &#23616;&#37096;&#23454;&#20307;</span>
h<span class="br0">(</span>N<span class="sy4">::</span><span class="me2">A</span><span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#37325;&#36733;&#38598;&#21547; TU &#23616;&#37096;&#30340; N::adl(int)</span>
h<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#35843;&#29992; adl(double)</span>
adl<span class="br0">(</span>N<span class="sy4">::</span><span class="me2">A</span><span class="br0">{</span><span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#25214;&#19981;&#21040; N::adl(int) &#65292;&#35843;&#29992; N::adl(N::A)</span>
fr<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#35843;&#29992; f</span>
<span class="kw4">constexpr</span> <span class="kw4">auto</span> ptr <span class="sy1">=</span> fr<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#27492;&#22788; fr &#19981;&#21487;&#29992;&#20110;&#24120;&#37327;&#34920;&#36798;&#24335;</span>
<span class="br0">}</span></pre></div>
</div>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#31034;&#20363;&#22826;&#22797;&#26434;&#65292;&#38656;&#35201;&#26356;&#22909;&#30340;&#23433;&#25490;</td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>