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

205 lines
25 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>&#28304;&#25991;&#20214;&#21253;&#21547;</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_preprocessor_include skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#28304;&#25991;&#20214;&#21253;&#21547;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-preprocessor.html">preprocessor</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&#23558;&#20854;&#20182;&#28304;&#25991;&#20214;&#21253;&#21547;&#21040;&#24403;&#21069;&#28304;&#25991;&#20214;&#20013;&#32039;&#38543;&#25351;&#20196;&#20043;&#21518;&#30340;&#19968;&#34892;&#12290;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>#include &lt;</b></code> <span class="t-spar">h&#23383;&#31526;&#24207;&#21015;</span> <code><b>&gt;</b></code> <span class="t-spar">&#25442;&#34892;</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>#include &quot;</b></code> <span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span> <code><b>&quot;</b></code> <span class="t-spar">&#25442;&#34892;</span></td>
<td>(2)</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>#include</b></code> <span class="t-spar">&#35760;&#21495;&#24207;&#21015;</span> <span class="t-spar">&#25442;&#34892;</span></td>
<td>(3)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>__has_include</b></code> <code><b>(</b></code> <code><b>&quot;</b></code> <span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span> <code><b>&quot;</b></code> <code><b>)</b></code><br />
<code><b>__has_include</b></code> <code><b>(</b></code> <code><b>&lt;</b></code> <span class="t-spar">h&#23383;&#31526;&#24207;&#21015;</span> <code><b>&gt;</b></code> <code><b>)</b></code></td>
<td>(4)</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>__has_include</b></code> <code><b>(</b></code> <span class="t-spar">&#23383;&#31526;&#20018;&#23383;&#38754;&#37327;</span> <code><b>)</b></code><br />
<code><b>__has_include</b></code> <code><b>(</b></code> <code><b>&lt;</b></code> <span class="t-spar">h&#35760;&#21495;&#24207;&#21015;</span> <code><b>&gt;</b></code> <code><b>)</b></code></td>
<td>(5)</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#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> &#25628;&#32034;&#30001; <span class="t-spar">h&#23383;&#31526;&#24207;&#21015;</span> &#21807;&#19968;&#35782;&#21035;&#30340;&#22836;&#65292;&#24182;&#23558;&#35813;&#25351;&#20196;&#26367;&#25442;&#20026;&#36825;&#20010;&#22836;&#30340;&#20840;&#37096;&#20869;&#23481;&#12290;</div>
<div class="t-li1"><span class="t-li">2)</span> &#25628;&#32034;&#30001; <span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span> &#35782;&#21035;&#30340;&#28304;&#25991;&#20214;&#65292;&#24182;&#23558;&#35813;&#25351;&#20196;&#26367;&#25442;&#20026;&#36825;&#20010;&#28304;&#25991;&#20214;&#30340;&#20840;&#37096;&#20869;&#23481;&#12290;&#21487;&#20197;&#36864;&#22238;&#33267;&#35821;&#27861; (1) &#24182;&#23558; <span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span> &#35270;&#20026;&#22836;&#26631;&#35782;&#31526;&#12290;</div>
<div class="t-li1"><span class="t-li">3)</span> &#22914;&#26524; (1) &#21644; (2) &#37117;&#19981;&#21305;&#37197;&#65292;<span class="t-spar">&#35760;&#21495;&#24207;&#21015;</span>&#20250;&#32463;&#21382;&#23439;&#26367;&#25442;&#12290;&#35813;&#25351;&#20196;&#22312;&#26367;&#25442;&#21518;&#20250;&#20877;&#27425;&#23581;&#35797;&#21305;&#37197; (1) &#21644; (2)&#12290;</div>
<div class="t-li1"><span class="t-li">4)</span> &#26816;&#26597;&#19968;&#20010;&#22836;&#25110;&#28304;&#25991;&#20214;&#26159;&#21542;&#21487;&#20197;&#34987;&#21253;&#21547;&#12290;</div>
<div class="t-li1"><span class="t-li">5)</span> &#22914;&#26524; (4) &#19981;&#21305;&#37197;&#65292;<span class="t-spar">h&#35760;&#21495;&#24207;&#21015;</span>&#20250;&#32463;&#21382;&#23439;&#26367;&#25442;&#12290;T&#35813;&#25351;&#20196;&#22312;&#26367;&#25442;&#21518;&#20250;&#20877;&#27425;&#23581;&#35797;&#21305;&#37197; (4)&#12290;</div>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#25442;&#34892;</span></td>
<td>-</td>
<td>&#25442;&#34892;&#31526;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">h&#23383;&#31526;&#24207;&#21015;</span></td>
<td>-</td>
<td>&#19968;&#20010;&#25110;&#22810;&#20010; <span class="t-spar">h&#23383;&#31526;</span></td>
</tr>
<tr class="t-par">
<td><span class="t-spar">h&#23383;&#31526;</span></td>
<td>-</td>
<td><span class="t-rev-inl t-until-cxx23"><span><a href="cpp-language-translation_phases.html#.E9.98.B6.E6.AE.B5_5">&#28304;&#23383;&#31526;&#38598;</a></span> <span><span class="t-mark-rev t-until-cxx23">(C++23 &#21069;)</span></span></span><span class="t-rev-inl t-since-cxx23"><span><a href="cpp-language-charset.html#.E7.BF.BB.E8.AF.91.E5.AD.97.E7.AC.A6.E9.9B.86">&#32763;&#35793;&#23383;&#31526;&#38598;</a></span> <span><span class="t-mark-rev t-since-cxx23">(C++23 &#36215;)</span></span></span> &#38500;&#20102;&#25442;&#34892;&#31526;&#21644; <code>&gt;</code> &#20197;&#22806;&#30340;&#20219;&#20309;&#25104;&#21592;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span></td>
<td>-</td>
<td>&#19968;&#20010;&#25110;&#22810;&#20010; <span class="t-spar">q&#23383;&#31526;</span></td>
</tr>
<tr class="t-par">
<td><span class="t-spar">q&#23383;&#31526;</span></td>
<td>-</td>
<td><span class="t-rev-inl t-until-cxx23"><span><a href="cpp-language-translation_phases.html#.E9.98.B6.E6.AE.B5_5">&#28304;&#23383;&#31526;&#38598;</a></span> <span><span class="t-mark-rev t-until-cxx23">(C++23 &#21069;)</span></span></span><span class="t-rev-inl t-since-cxx23"><span><a href="cpp-language-charset.html#.E7.BF.BB.E8.AF.91.E5.AD.97.E7.AC.A6.E9.9B.86">&#32763;&#35793;&#23383;&#31526;&#38598;</a></span> <span><span class="t-mark-rev t-since-cxx23">(C++23 &#36215;)</span></span></span> &#38500;&#20102;&#25442;&#34892;&#31526;&#21644; <code>&quot;</code> &#20197;&#22806;&#30340;&#20219;&#20309;&#25104;&#21592;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#35760;&#21495;&#24207;&#21015;</span></td>
<td>-</td>
<td>&#19968;&#20010;&#25110;&#22810;&#20010;<a href="cpp-language-translation_phases.html#.E9.98.B6.E6.AE.B5_3">&#39044;&#22788;&#29702;&#35760;&#21495;</a></td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#23383;&#31526;&#20018;&#23383;&#38754;&#37327;</span></td>
<td>-</td>
<td>&#19968;&#20010;<a href="cpp-language-string_literal.html">&#23383;&#31526;&#20018;&#23383;&#38754;&#37327;</a></td>
</tr>
<tr class="t-par">
<td><span class="t-spar">h&#35760;&#21495;&#24207;&#21015;</span></td>
<td>-</td>
<td>&#19968;&#20010;&#25110;&#22810;&#20010;&#38500;&#20102; <code>&gt;</code> &#20197;&#22806;&#30340;<a href="cpp-language-translation_phases.html#.E9.98.B6.E6.AE.B5_3">&#39044;&#22788;&#29702;&#35760;&#21495;</a></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.AF.B4.E6.98.8E">&#35828;&#26126;</span></h3>
<div class="t-li1"><span class="t-li">1)</span> &#22312;&#19968;&#31995;&#21015;&#30001;&#23454;&#29616;&#23450;&#20041;&#30340;&#22320;&#28857;&#20013;&#25628;&#32034;&#30001; <span class="t-spar">h&#23383;&#31526;&#24207;&#21015;</span> &#21807;&#19968;&#35782;&#21035;&#30340;&#22836;&#65292;&#24182;&#23558;&#35813;&#25351;&#20196;&#26367;&#25442;&#20026;&#36825;&#20010;&#22836;&#30340;&#20840;&#37096;&#20869;&#23481;&#12290;&#30001;&#23454;&#29616;&#23450;&#20041;&#22914;&#20309;&#21046;&#25351;&#23450;&#36825;&#20123;&#22320;&#28857;&#21644;&#35782;&#21035;&#22836;&#12290;</div>
<div class="t-li1"><span class="t-li">2)</span> &#23558;&#35813;&#25351;&#20196;&#26367;&#25442;&#20026;&#30001; <span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span> &#35782;&#21035;&#30340;&#28304;&#25991;&#20214;&#30340;&#20840;&#37096;&#20869;&#23481;&#12290;&#21629;&#21517;&#30340;&#28304;&#25991;&#20214;&#36890;&#36807;&#30001;&#23454;&#29616;&#23450;&#20041;&#30340;&#26041;&#24335;&#36827;&#34892;&#25628;&#32034;&#12290;&#22914;&#26524;&#19981;&#25903;&#25345;&#36825;&#31181;&#25628;&#32034;&#25110;&#32773;&#25628;&#32034;&#22833;&#36133;&#65292;&#35813;&#25351;&#20196;&#25353;&#35821;&#27861; (1) &#37325;&#26032;&#22788;&#29702;&#65292;&#23558;&#21407;&#25351;&#20196;&#20013;&#21253;&#21547;&#30340;&#24207;&#21015;&#65288;&#21253;&#25324;&#22823;&#20110;&#21495;&#65292;&#22914;&#26524;&#23384;&#22312;&#65289;&#20316;&#20026;&#35821;&#27861; (1) &#20013;&#25152;&#38656;&#30340;&#24207;&#21015;&#12290;</div>
<div class="t-li1"><span class="t-li">3)</span> &#35813;&#25351;&#20196;&#20013; <code><b>include</b></code> &#21518;&#38754;&#30340;&#39044;&#22788;&#29702;&#35760;&#21495;&#20250;&#25353;&#22312;&#27491;&#24120;&#25991;&#26412;&#20013;&#36827;&#34892;&#22788;&#29702;&#65288;&#21363;&#27599;&#20010;&#30446;&#21069;&#23450;&#20041;&#20026;&#23439;&#21517;&#30340;&#26631;&#35782;&#31526;&#37117;&#20250;&#34987;&#26367;&#25442;&#20026;&#23427;&#30340;&#39044;&#22788;&#29702;&#35760;&#21495;&#26367;&#25442;&#21015;&#34920;&#65289;&#22914;&#26524;&#22312;&#25152;&#26377;&#26367;&#25442;&#37117;&#23436;&#25104;&#21518;&#29983;&#25104;&#30340;&#25351;&#20196;&#19981;&#21305;&#37197;&#21069;&#38754;&#20004;&#31181;&#35821;&#27861;&#65292;&#37027;&#20040;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;&#23558;&#22312;&#19968;&#23545;&#39044;&#22788;&#29702;&#35760;&#21495; &lt; &#21644; &gt; &#20043;&#38388;&#25110;&#19968;&#23545; &quot; &#23383;&#31526;&#20043;&#21069;&#30340;&#39044;&#22788;&#29702;&#35760;&#21495;&#24207;&#21015;&#21512;&#24182;&#20026;&#21333;&#20010;&#22836;&#21517;&#39044;&#22788;&#29702;&#35760;&#21495;&#30340;&#26041;&#27861;&#30001;&#23454;&#29616;&#23450;&#20041;&#12290;</div>
<div class="t-li1"><span class="t-li">4)</span> &#25628;&#32034;&#30001; <span class="t-spar">h&#23383;&#31526;&#24207;&#21015;</span> &#25110; <span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span> &#35782;&#21035;&#30340;&#22836;&#25110;&#28304;&#25991;&#20214;&#65292;&#22914;&#21516;&#36890;&#36807;&#23558;&#35813;&#39044;&#22788;&#29702;&#35760;&#21495;&#24207;&#21015;&#20316;&#20026;&#35821;&#27861; (3) &#20013;&#30340; <span class="t-spar">&#35760;&#21495;&#24207;&#21015;</span> &#30340;&#26041;&#27861;&#36827;&#34892;&#25628;&#32034;&#65292;&#20294;&#19981;&#20250;&#26377;&#21518;&#32493;&#30340;&#23439;&#23637;&#24320;&#20250;&#25191;&#34892;&#12290;&#22914;&#26524;&#21018;&#25165;&#30340;&#35821;&#27861; (3) &#25351;&#20196;&#19981;&#28385;&#36275; <code>#include</code> &#25351;&#20196;&#30340;&#35821;&#27861;&#35201;&#27714;&#65292;&#37027;&#20040;&#31243;&#24207;&#38750;&#33391;&#26500;&#12290;&#22914;&#26524;&#25628;&#32034;&#25104;&#21151;&#65292;<code>__has_include</code> &#34920;&#36798;&#24335;&#27714;&#20540;&#20026; 1&#65292;&#21542;&#21017;&#65288;&#25628;&#32034;&#22833;&#36133;&#26102;&#65289;&#27714;&#20540;&#20026; 0&#12290;</div>
<div class="t-li1"><span class="t-li">5)</span> &#21482;&#26377;&#22312;&#19981;&#21305;&#37197; (4) &#25165;&#20250;&#36873;&#25321;&#27492;&#24418;&#24335;&#65292;&#27492;&#26102;&#39044;&#22788;&#29702;&#35760;&#21495;&#20250;&#25353;&#22312;&#27491;&#24120;&#25991;&#26412;&#20013;&#36827;&#34892;&#22788;&#29702;&#12290;</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<p>&#22914;&#26524;&#30001; <span class="t-spar">&#22836;&#21517;</span>&#65288;&#21363; <code><b>&lt;</b></code> <span class="t-spar">h&#23383;&#31526;&#24207;&#21015;</span> <code><b>&gt;</b></code> &#25110; <code><b>&quot;</b></code> <span class="t-spar">q&#23383;&#31526;&#24207;&#21015;</span> <code><b>&quot;</b></code>&#65289;&#26631;&#35782;&#30340;&#22836;&#25351;&#26126;&#20102;&#19968;&#20010;&#21487;&#20197;&#23548;&#20837;&#30340;&#22836;&#65292;&#37027;&#20040;&#30001;&#23454;&#29616;&#20915;&#23450;&#35201;&#21253;&#21547;&#36825;&#20010;&#22836;&#30340; <code>#include</code> &#39044;&#22788;&#29702;&#25351;&#20196;&#26159;&#21542;&#35201;&#34987;&#26367;&#25442;&#20026;&#20855;&#26377;&#20197;&#19979;&#24418;&#24335;&#30340;<a href="cpp-language-modules.html#.E5.AF.BC.E5.85.A5.E6.A8.A1.E5.9D.97.E5.92.8C.E5.A4.B4">&#23548;&#20837;&#25351;&#20196;</a>&#65306;</p>
<p><code><b>import</b></code> <span class="t-spar">&#22836;&#21517;</span> <code><b>;</b></code> <span class="t-spar">&#25442;&#34892;</span></p>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p><code>__has_include</code> &#21487;&#20197;&#22312; <a href="cpp-preprocessor-conditional.html"><tt>#if</tt></a> &#21644; <a href="cpp-preprocessor-conditional.html"><tt>#elif</tt></a> &#20013;&#30340;&#34920;&#36798;&#24335;&#23637;&#24320;&#12290;&#23427;&#34987; <a href="cpp-preprocessor-conditional.html"><tt>#ifdef</tt></a>&#65292; <a href="cpp-preprocessor-conditional.html"><tt>#ifndef</tt></a><span class="t-rev-inl t-since-cxx23"><span>&#65292; <a href="cpp-preprocessor-conditional.html"><tt>#elifdef</tt></a>&#65292; <a href="cpp-preprocessor-conditional.html"><tt>#elifndef</tt></a></span> <span><span class="t-mark-rev t-since-cxx23">(C++23 &#36215;)</span></span></span> &#21644; <a href="cpp-preprocessor-conditional.html"><tt>defined</tt></a> &#35270;&#20026;&#24050;&#23450;&#20041;&#30340;&#23439;&#65292;&#20294;&#19981;&#33021;&#22312;&#20854;&#20182;&#20219;&#20309;&#22320;&#26041;&#20351;&#29992;&#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>&#35821;&#27861; (1) &#30340;&#24847;&#22270;&#26159;&#25628;&#32034;&#30001;&#23454;&#29616;&#25152;&#25484;&#25511;&#30340;&#25991;&#20214;&#12290;&#20856;&#22411;&#23454;&#29616;&#20165;&#25628;&#32034;&#26631;&#20934;&#21253;&#21547;&#30446;&#24405;&#12290;&#36825;&#20123;&#26631;&#20934;&#21253;&#21547;&#30446;&#24405;&#20013;&#38544;&#21547;&#22320;&#21253;&#21547;&#26631;&#20934; C++ &#24211;&#21644;&#26631;&#20934; C &#24211;&#12290;&#29992;&#25143;&#36890;&#24120;&#33021;&#36890;&#36807;&#32534;&#35793;&#22120;&#36873;&#39033;&#26469;&#25511;&#21046;&#26631;&#20934;&#21253;&#21547;&#30446;&#24405;&#12290;</p>
<p>&#35821;&#27861; (2) &#30340;&#24847;&#22270;&#26159;&#25628;&#32034;&#19981;&#34987;&#23454;&#29616;&#25152;&#25484;&#25511;&#30340;&#25991;&#20214;&#12290;&#20856;&#22411;&#23454;&#29616;&#39318;&#20808;&#20110;&#24403;&#21069;&#25991;&#20214;&#25152;&#22312;&#30340;&#30446;&#24405;&#25628;&#32034;&#65292;&#28982;&#21518;&#36864;&#22238;&#20351;&#29992;&#35821;&#27861; (1)&#12290;</p>
<p>&#21253;&#21547;&#19968;&#20010;&#25991;&#20214;&#26102;&#65292;&#23427;&#23558;&#32463;&#36807;<a href="cpp-language-translation_phases.html">&#32763;&#35793;&#38454;&#27573;</a> 1-4 &#30340;&#22788;&#29702;&#65292;&#36825;&#21487;&#33021;&#36882;&#24402;&#22320;&#21253;&#21547;&#23884;&#22871; <code>#include</code> &#25351;&#20196;&#30340;&#23637;&#24320;&#65292;&#30452;&#21040;&#19968;&#20010;&#30001;&#23454;&#29616;&#23450;&#20041;&#30340;&#23884;&#22871;&#38480;&#21046;&#12290;&#20026;&#36991;&#20813;&#65288;&#21487;&#33021;&#20256;&#36882;&#24615;&#22320;&#65289;&#37325;&#22797;&#21253;&#21547;&#30456;&#21516;&#25991;&#20214;&#65292;&#21644;&#30001;&#25991;&#20214;&#21253;&#21547;&#33258;&#36523;&#36896;&#25104;&#30340;&#26080;&#38480;&#36882;&#24402;&#65292;&#36890;&#24120;&#20351;&#29992;<i>&#22836;&#25991;&#20214;&#38450;&#25252;</i>&#65306;&#25972;&#20010;&#22836;&#25991;&#20214;&#34987;&#21253;&#35013;&#22312;&#19979;&#21015;&#32467;&#26500;&#20013;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#ifndef FOO_H_INCLUDED /* &#20219;&#20309;&#21807;&#19968;&#22320;&#26144;&#23556;&#21040;&#25991;&#20214;&#30340;&#21517;&#31216; */</span>
<span class="co2">#define FOO_H_INCLUDED</span>
<span class="co1">// &#25991;&#20214;&#20869;&#23481;&#22312;&#27492;</span>
<span class="co2">#endif</span></pre></div>
</div>
<p>&#35768;&#22810;&#32534;&#35793;&#22120;&#20063;&#20250;&#23454;&#29616;&#26377;&#31867;&#20284;&#25928;&#26524;&#30340;&#38750;&#26631;&#20934; <a href="cpp-preprocessor-impl.html"><tt>pragma</tt></a> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="co2">#pragma once</span></span></span>&#65306;&#22312;&#24050;&#32463;&#21253;&#21547;&#30456;&#21516;&#25991;&#20214;&#65288;&#25991;&#20214;&#30340;&#36523;&#20221;&#20197;&#25805;&#20316;&#31995;&#32479;&#25351;&#23450;&#30340;&#26041;&#24335;&#30830;&#23450;&#65289;&#30340;&#26102;&#20505;&#31105;&#27490;&#22788;&#29702;&#35813;&#25991;&#20214;&#12290;</p>
<p>&#32467;&#26524;&#26159; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">1</span></span></span> &#30340; <code>__has_include</code> &#21482;&#34920;&#26126;&#23384;&#22312;&#26377;&#25351;&#23450;&#21517;&#31216;&#30340;&#22836;&#25110;&#28304;&#25991;&#20214;&#12290;&#23427;&#24182;&#19981;&#24847;&#21619;&#30528;&#21253;&#21547;&#35813;&#22836;&#25110;&#28304;&#25991;&#20214;&#26102;&#19981;&#20250;&#23548;&#33268;&#38169;&#35823;&#65292;&#25110;&#23427;&#20250;&#21253;&#21547;&#20219;&#20309;&#26377;&#24847;&#20041;&#30340;&#20869;&#23481;&#12290;&#20363;&#22914;&#22312;&#21516;&#26102;&#25903;&#25345; C++14 &#21644; C++17 &#27169;&#24335;&#65288;&#24182;&#22312;&#20854; C++14 &#27169;&#24335;&#20316;&#20026;&#19968;&#39033;&#36981;&#20174;&#26631;&#20934;&#30340;&#25193;&#23637;&#32780;&#25552;&#20379; <span class="t-c"><span class="mw-geshi cpp source-cpp">__has_include</span></span>&#65289;&#30340; C++ &#23454;&#29616;&#19978;&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp">__has_include<span class="br0">(</span><span class="sy1">&lt;</span>optional<span class="sy1">&gt;</span><span class="br0">)</span></span></span> &#22312; C++14 &#27169;&#24335;&#20013;&#21487;&#20197;&#26159; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">1</span></span></span>&#65292;&#20294;&#23454;&#38469;&#19978; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="co2">#include &lt;optional&gt;</span></span></span> &#21487;&#33021;&#23548;&#33268;&#38169;&#35823;&#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="co2">#if __has_include(&lt;optional&gt;)</span>
<span class="co2"># include &lt;optional&gt;</span>
<span class="co2"># define has_optional 1</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">using</span> optional_t <span class="sy1">=</span> <a href="cpp-utility-optional.html"><span class="kw1075">std::<span class="me2">optional</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="co2">#elif __has_include(&lt;experimental/optional&gt;)</span>
<span class="co2"># include &lt;experimental/optional&gt;</span>
<span class="co2"># define has_optional -1</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">using</span> optional_t <span class="sy1">=</span> <a href="http://zh.cppreference.com/w/cpp/experimental/optional"><span class="kw2299">std::<span class="me2">experimental</span><span class="sy4">::</span><span class="me2">optional</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="co2">#else</span>
<span class="co2"># define has_optional 0</span>
<span class="co2"># include &lt;utility&gt;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> V<span class="sy1">&gt;</span> <span class="kw1">class</span> optional_t <span class="br0">{</span>
V v_<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="kw4">bool</span> has_<span class="br0">{</span><span class="kw2">false</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">public</span><span class="sy4">:</span>
optional_t<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
optional_t<span class="br0">(</span>V<span class="sy3">&amp;&amp;</span> v<span class="br0">)</span> <span class="sy4">:</span> v_<span class="br0">(</span>v<span class="br0">)</span>, has_<span class="br0">{</span><span class="kw2">true</span><span class="br0">}</span> <span class="br0">{</span><span class="br0">}</span>
V value_or<span class="br0">(</span>V<span class="sy3">&amp;&amp;</span> alt<span class="br0">)</span> <span class="kw4">const</span><span class="sy3">&amp;</span> <span class="br0">{</span> <span class="kw1">return</span> has_ <span class="sy4">?</span> v_ <span class="sy4">:</span> alt<span class="sy4">;</span> <span class="br0">}</span>
<span class="coMULTI">/*...*/</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co2">#endif</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">if</span> <span class="br0">(</span>has_optional <span class="sy1">&gt;</span> <span class="nu0">0</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;&lt;optional&gt; &#23384;&#22312;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">(</span>has_optional <span class="sy1">&lt;</span> <span class="nu0">0</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;&lt;experimental/optional&gt; &#23384;&#22312;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="kw1">else</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;&lt;optional&gt; &#19981;&#23384;&#22312;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
optional_t<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> op<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> <span class="st0">&quot;op = &quot;</span> <span class="sy1">&lt;&lt;</span> op.<span class="me1">value_or</span><span class="br0">(</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
op <span class="sy1">=</span> <span class="nu0">42</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> <span class="st0">&quot;op = &quot;</span> <span class="sy1">&lt;&lt;</span> op.<span class="me1">value_or</span><span class="br0">(</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">)</span> <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>
<p>&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">&lt;optional&gt; &#23384;&#22312;
op = -1
op = 42</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin">
<tr class="t-dsc">
<td colspan="2"><a href="cpp-header.html">C++ &#26631;&#20934;&#24211;&#22836;&#25991;&#20214;&#21015;&#34920;</a></td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>