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

520 lines
55 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>&#26522;&#20030;&#22768;&#26126;</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_enum skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#26522;&#20030;&#22768;&#26126;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-language.html">language</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p><i>&#26522;&#20030;&#65288;enumeration&#65289;</i>&#26159;&#29420;&#31435;&#30340;&#31867;&#22411;&#65292;&#23427;&#30340;&#20540;&#34987;&#38480;&#21046;&#22312;&#19968;&#20010;&#21462;&#20540;&#33539;&#22260;&#20869;&#65288;&#32454;&#33410;&#35265;&#19979;&#25991;&#65289;&#65292;&#23427;&#21487;&#20197;&#21253;&#21547;&#25968;&#20010;&#26126;&#30830;&#21629;&#21517;&#30340;&#24120;&#37327;&#65288;&ldquo;<i>&#26522;&#20030;&#39033;&#65288;enumerator&#65289;</i>&rdquo;&#65289;&#12290;&#21508;&#24120;&#37327;&#30340;&#20540;&#26159;&#26576;&#20010;&#25972;&#22411;&#31867;&#22411;&#65288;&#31216;&#20026;&#35813;&#26522;&#20030;&#30340;<i>&#24213;&#23618;&#31867;&#22411;&#65288;underlying type&#65289;</i>&#65289;&#30340;&#20540;&#12290;</p>
<p>&#26522;&#20030;&#20197;&#19979;&#21015;&#35821;&#27861;&#23450;&#20041;&#65306;</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">&#26522;&#20030;&#20851;&#38190;&#35789;</span> <span class="t-spar">&#23646;&#24615;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#26522;&#20030;&#21517;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#26522;&#20030;&#22522;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>{</b></code> <span class="t-spar">&#26522;&#20030;&#39033;&#21015;&#34920;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>}</b></code></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">&#26522;&#20030;&#20851;&#38190;&#35789;</span> <span class="t-spar">&#23646;&#24615;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#26522;&#20030;&#21517;</span> <span class="t-spar">&#26522;&#20030;&#22522;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>;</b></code></td>
<td>(2)</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<div class="t-li1"><span class="t-li">1)</span> <i>&#26522;&#20030;&#35828;&#26126;&#31526;</i>&#65292;&#20986;&#29616;&#20110;<a href="cpp-language-declarations.html">&#22768;&#26126;</a>&#35821;&#27861;&#30340; <span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span> &#65306;&#23450;&#20041;&#26522;&#20030;&#31867;&#22411;&#19982;&#20854;&#26522;&#20030;&#39033;&#12290;</div>
<div class="t-li1"><span class="t-li">2)</span> <i>&#19981;&#21487;&#35265;&#65288;opaque&#65289;&#26522;&#20030;&#22768;&#26126;</i>&#65306;&#23450;&#20041;&#26522;&#20030;&#31867;&#22411;&#65292;&#20294;&#19981;&#23450;&#20041;&#20854;&#26522;&#20030;&#39033;&#65306;&#22312;&#27492;&#22768;&#26126;&#21518;&#65292;&#35813;&#31867;&#22411;&#26159;&#23436;&#25972;&#31867;&#22411;&#65292;&#19988;&#20854;&#22823;&#23567;&#24050;&#30693;&#12290;&#27880;&#24847;&#65306;&#20165;&#26377;&#30340;&#22312; <span class="t-spar">&#26522;&#20030;&#21517;</span> &#20043;&#21069;&#20986;&#29616; <span class="t-spar">&#23884;&#22871;&#21517;&#35828;&#26126;&#31526;</span> &#30340;&#24773;&#20917;&#65292;&#26159;&#31867;&#27169;&#26495;&#30340;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#25104;&#21592;&#30340;<a href="cpp-language-template_specialization.html">&#26174;&#24335;&#29305;&#21270;&#22768;&#26126;</a>}}&#12290;</div>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#26522;&#20030;&#20851;&#38190;&#23383;</span></td>
<td>-</td>
<td>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx11">
<td>
<p><code><b>enum</b></code></p>
</td>
<td><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></td>
</tr>
<tr class="t-rev t-since-cxx11">
<td>
<p><code><b>enum</b></code>&#12289; <code><b>enum class</b></code> &#25110; <code><b>enum struct</b></code> &#20043;&#19968;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#23646;&#24615;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span> &#21487;&#36873;&#30340;&#20219;&#24847;&#25968;&#37327;&#30340;<a href="cpp-language-attributes.html">&#23646;&#24615;</a>&#24207;&#21015;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#26522;&#20030;&#21517;</span></td>
<td>-</td>
<td>&#25152;&#22768;&#26126;&#30340;&#26522;&#20030;&#30340;&#21517;&#23383;&#12290;
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<p>&#21482;&#33021;&#22312;&#38750;&#19981;&#21487;&#35265;&#30340;&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;&#22768;&#26126;&#20013;&#30465;&#30053;&#21517;&#23383;&#12290;&#22914;&#26524;&#21517;&#23383;&#23384;&#22312;&#19988;&#27492;&#22768;&#26126;&#26159;&#37325;&#22768;&#26126;&#65292;&#37027;&#20040;&#23427;&#21069;&#38754;&#21487;&#20197;&#24102;&#26377; <span class="t-spar">&#23884;&#22871;&#21517;&#35828;&#26126;&#31526;</span>&#65292;&#21363;&#21517;&#23383;&#21644;&#20316;&#29992;&#22495;&#35299;&#26512;&#36816;&#31639;&#31526; <code>::</code> &#30340;&#24207;&#21015;&#24182;&#20197;&#20316;&#29992;&#22495;&#35299;&#26512;&#36816;&#31639;&#31526;&#32467;&#23614;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#26522;&#20030;&#22522;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span> &#20882;&#21495; (<code><b>:</b></code>)&#65292;&#21518;&#38543;&#25351;&#21517;&#26576;&#20010;&#25972;&#22411;&#31867;&#22411;&#30340; <span class="t-spar">&#31867;&#22411;&#35828;&#26126;&#31526;&#24207;&#21015;</span>&#65288;&#24573;&#30053;&#20854;&#38480;&#23450;&#24615;&#65289;&#65292;&#35813;&#31867;&#22411;&#23558;&#20316;&#20026;&#27492;&#26522;&#20030;&#31867;&#22411;&#30340;&#22266;&#23450;&#24213;&#23618;&#31867;&#22411;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#26522;&#20030;&#39033;&#21015;&#34920;</span></td>
<td>-</td>
<td>&#26522;&#20030;&#39033;&#23450;&#20041;&#30340;&#36887;&#21495;&#20998;&#38548;&#21015;&#34920;&#65292;&#27599;&#39033;&#35201;&#20040;&#26159;&#31616;&#21333;&#30340; <span class="t-spar">&#26631;&#35782;&#31526;</span>&#65292;&#23427;&#25104;&#20026;&#26522;&#20030;&#39033;&#30340;&#21517;&#23383;&#65292;&#35201;&#20040;&#26159;&#24102;&#21021;&#22987;&#21270;&#22120;&#30340;&#26631;&#35782;&#31526;&#65306;<span class="t-spar">&#26631;&#35782;&#31526;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span>&#12290;<span class="t-rev-inl t-since-cxx17"><span>&#22312;&#20219;&#19968;&#24773;&#20917;&#19979;&#65292;<span class="t-spar">&#26631;&#35782;&#31526;</span> &#21487;&#30452;&#25509;&#21518;&#38543;&#19968;&#20010;&#21487;&#36873;&#30340;<a href="cpp-language-attributes.html">&#23646;&#24615;&#35828;&#26126;&#31526;&#24207;&#21015;</a>&#12290;</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span></td>
</tr>
</table>
<p>&#26377;&#20004;&#31181;&#25130;&#28982;&#19981;&#21516;&#30340;&#26522;&#20030;&#65306;<i>&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;</i>&#65288;&#20197; <span class="t-spar">&#26522;&#20030;&#20851;&#38190;&#35789;</span> <code><b>enum</b></code> &#22768;&#26126;&#65289;&#21644;<i>&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;</i>&#65288;&#20197; <span class="t-spar">&#26522;&#20030;&#20851;&#38190;&#35789;</span> <code><b>enum class</b></code> &#25110; <code><b>enum struct</b></code> &#22768;&#26126;&#65289;&#12290;</p>
<h3><span class="mw-headline" id=".E6.97.A0.E4.BD.9C.E7.94.A8.E5.9F.9F.E6.9E.9A.E4.B8.BE">&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>enum</b></code> <span class="t-spar">&#21517;&#23383;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>{</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> ... <code><b>}</b></code></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>enum</b></code> <span class="t-spar">&#21517;&#23383;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>:</b></code> <span class="t-spar">&#31867;&#22411;</span> <code><b>{</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> ... <code><b>}</b></code></td>
<td>(2)</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>enum</b></code> <span class="t-spar">&#21517;&#23383;</span> <code><b>:</b></code> <span class="t-spar">&#31867;&#22411;</span> <code><b>;</b></code></td>
<td>(3)</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<div class="t-li1"><span class="t-li">1)</span> &#22768;&#26126;&#19968;&#20010;&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;&#65292;&#20854;&#24213;&#23618;&#31867;&#22411;&#19981;&#22266;&#23450;&#65288;&#27492;&#26102;&#24213;&#23618;&#31867;&#22411;&#26159;&#30001;&#23454;&#29616;&#23450;&#20041;&#30340;&#26576;&#20010;&#33021;&#34920;&#31034;&#25152;&#26377;&#26522;&#20030;&#39033;&#20540;&#30340;&#25972;&#22411;&#31867;&#22411;&#65307;&#27492;&#31867;&#22411;&#19981;&#22823;&#20110; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span>&#65292;&#38500;&#38750;&#26522;&#20030;&#39033;&#30340;&#20540;&#19981;&#33021;&#25918;&#20837; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span> &#25110; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span>&#12290;&#22914;&#26524; <span class="t-spar">&#26522;&#20030;&#39033;&#21015;&#34920;</span> &#20026;&#31354;&#65292;&#21017;&#24213;&#23618;&#31867;&#22411;&#20026;&#22914;&#21516;&#26522;&#20030;&#25317;&#26377;&#21333;&#20010;&#20540;&#20026; 0 &#30340;&#26522;&#20030;&#39033;&#65289;&#12290;</div>
<div class="t-li1"><span class="t-li">2)</span> &#22768;&#26126;&#19968;&#20010;&#24213;&#23618;&#31867;&#22411;&#22266;&#23450;&#30340;&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;&#12290;</div>
<div class="t-li1"><span class="t-li">3)</span> &#26080;&#20316;&#29992;&#22495;&#26522;&#20030;&#30340;&#19981;&#21487;&#35265;&#26522;&#20030;&#22768;&#26126;&#24517;&#39035;&#25351;&#23450;&#21517;&#23383;&#19982;&#24213;&#23618;&#31867;&#22411;&#12290;</div>
<p>&#27599;&#20010; <span class="t-spar">&#26522;&#20030;&#39033;</span> &#37117;&#25104;&#20026;&#35813;&#26522;&#20030;&#31867;&#22411;&#65288;&#21363; <span class="t-spar">&#21517;&#23383;</span>&#65289;&#30340;&#19968;&#20010;&#20855;&#21517;&#24120;&#37327;&#65292;&#22312;&#20854;&#22806;&#22260;&#20316;&#29992;&#22495;&#21487;&#35265;&#65292;&#19988;&#21487;&#29992;&#20110;&#35201;&#27714;&#24120;&#37327;&#30340;&#20219;&#20309;&#20301;&#32622;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> Color <span class="br0">{</span> red, green, blue <span class="br0">}</span><span class="sy4">;</span>
Color r <span class="sy1">=</span> red<span class="sy4">;</span>
<span class="kw1">switch</span><span class="br0">(</span>r<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">case</span> red <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;&#32418;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> green<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;&#32511;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> blue <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;&#34013;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#27599;&#20010;&#26522;&#20030;&#39033;&#37117;&#19982;&#19968;&#20010;&#24213;&#23618;&#31867;&#22411;&#30340;&#20540;&#30456;&#20851;&#32852;&#12290;&#24403;&#22312; <span class="t-spar">&#26522;&#20030;&#39033;&#21015;&#34920;</span> &#20013;&#25552;&#20379;&#20102;&#21021;&#22987;&#21270;&#22120;&#26102;&#65292;&#21508;&#26522;&#20030;&#39033;&#30340;&#20540;&#30001;&#37027;&#20123;&#21021;&#22987;&#21270;&#22120;&#25152;&#23450;&#20041;&#12290;&#22914;&#26524;&#39318;&#20010;&#26522;&#20030;&#39033;&#26080;&#21021;&#22987;&#21270;&#22120;&#65292;&#37027;&#20040;&#23427;&#30340;&#20851;&#32852;&#20540;&#20026;&#38646;&#12290;&#23545;&#20110;&#20854;&#20182;&#20219;&#20309;&#23450;&#20041;&#20013;&#26080;&#21021;&#22987;&#21270;&#22120;&#30340;&#26522;&#20030;&#39033;&#65292;&#20854;&#20851;&#32852;&#20540;&#20026;&#21069;&#19968;&#26522;&#20030;&#39033;&#21152;&#19968;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> Foo <span class="br0">{</span> a, b, c <span class="sy1">=</span> <span class="nu0">10</span>, d, e <span class="sy1">=</span> <span class="nu0">1</span>, f, g <span class="sy1">=</span> f <span class="sy2">+</span> c <span class="br0">}</span><span class="sy4">;</span>
<span class="co1">//a = 0, b = 1, c = 10, d = 11, e = 1, f = 2, g = 12</span></pre></div>
</div>
<p>&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;&#30340;&#20540;<a href="cpp-language-implicit_conversion.html#.E6.95.B4.E5.9E.8B.E6.8F.90.E5.8D.87">&#21487;&#38544;&#24335;&#36716;&#25442;</a>&#20026;&#25972;&#22411;&#31867;&#22411;&#12290;&#22914;&#26524;&#24213;&#23618;&#31867;&#22411;&#19981;&#22266;&#23450;&#65292;&#37027;&#20040;&#35813;&#20540;&#21487;&#36716;&#25442;&#21040;&#19979;&#21015;&#39318;&#20010;&#33021;&#20445;&#26377;&#20854;&#25972;&#20010;&#20540;&#33539;&#22260;&#30340;&#31867;&#22411;&#65306;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">long</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">long</span></span></span><span class="t-rev-inl t-since-cxx11"><span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">long</span> <span class="kw4">long</span></span></span> &#25110; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span></span></span>&#12289;&#25317;&#26377;&#26356;&#39640;&#36716;&#25442;&#31561;&#32423;&#30340;&#25193;&#23637;&#25972;&#25968;&#31867;&#22411;&#65288;&#25353;&#36716;&#25442;&#31561;&#32423;&#39034;&#24207;&#65292;&#26377;&#31526;&#21495;&#20248;&#20808;&#20110;&#26080;&#31526;&#21495;&#65289;</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#12290;&#22914;&#26524;&#24213;&#23618;&#31867;&#22411;&#22266;&#23450;&#65292;&#37027;&#20040;&#35813;&#20540;&#21487;&#36716;&#25442;&#21040;&#20854;&#25552;&#21319;&#21518;&#30340;&#24213;&#23618;&#31867;&#22411;&#65288;&#22312;<a href="cpp-language-overload_resolution.html">&#37325;&#36733;&#20915;&#35758;</a>&#20013;&#20248;&#20808;&#65289;&#65292;&#20043;&#21518;&#23427;&#33021;&#34987;<a href="cpp-language-implicit_conversion.html#.E6.95.B4.E5.9E.8B.E6.8F.90.E5.8D.87">&#25552;&#21319;</a>&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> color <span class="br0">{</span> red, yellow, green <span class="sy1">=</span> <span class="nu0">20</span>, blue <span class="br0">}</span><span class="sy4">;</span>
color col <span class="sy1">=</span> red<span class="sy4">;</span>
<span class="kw4">int</span> n <span class="sy1">=</span> blue<span class="sy4">;</span> <span class="co1">// n == 21</span></pre></div>
</div>
<p>&#25972;&#25968;&#12289;&#28014;&#28857;&#21644;&#26522;&#20030;&#31867;&#22411;&#30340;&#20540;&#21487;&#29992; <a href="cpp-language-static_cast.html"><code>static_cast</code></a> &#25110;<a href="cpp-language-explicit_cast.html">&#26174;&#24335;&#36716;&#22411;</a>&#36716;&#25442;&#21040;&#20219;&#20309;&#26522;&#20030;&#31867;&#22411;&#12290;&#22914;&#26524;&#24213;&#23618;&#31867;&#22411;&#19981;&#22266;&#23450;&#19988;&#28304;&#20540;&#22312;&#33539;&#22260;&#22806;&#65288;&#28304;&#20540;&#65292;&#22914;&#26524;&#26159;&#28014;&#28857;&#31867;&#22411;&#21017;&#39318;&#20808;&#36716;&#25442;&#21040;&#26522;&#20030;&#30340;&#24213;&#23618;&#31867;&#22411;&#65292;&#33021;&#20197;&#36275;&#20197;&#20445;&#26377;&#30446;&#26631;&#26522;&#20030;&#30340;&#25152;&#26377;&#26522;&#20030;&#39033;&#30340;&#26368;&#23567;&#20301;&#22495;&#34920;&#31034;&#30340;&#24773;&#20917;&#19979;&#22312;&#33539;&#22260;&#20869;&#65289;&#65292;&#21017;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;&#21542;&#21017;&#65292;&#32467;&#26524;&#19982;<a href="cpp-language-implicit_conversion.html">&#38544;&#24335;&#36716;&#25442;</a>&#21040;&#24213;&#23618;&#31867;&#22411;&#30340;&#32467;&#26524;&#30456;&#21516;&#12290;</p>
<p>&#27880;&#24847;&#65292;&#36825;&#31181;&#36716;&#25442;&#21518;&#30340;&#20540;&#19981;&#24517;&#31561;&#20110;&#20219;&#20309;&#20026;&#35813;&#26522;&#20030;&#25152;&#23450;&#20041;&#30340;&#20855;&#21517;&#26522;&#20030;&#39033;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> access_t <span class="br0">{</span> read <span class="sy1">=</span> <span class="nu0">1</span>, write <span class="sy1">=</span> <span class="nu0">2</span>, exec <span class="sy1">=</span> <span class="nu0">4</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">//&#26522;&#20030;&#39033;&#65306;1&#12289;2&#12289;4 &#33539;&#22260;&#65306;0..7</span>
access_t rwe <span class="sy1">=</span> <span class="kw1">static_cast</span><span class="sy1">&lt;</span>access_t<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">7</span><span class="br0">)</span><span class="sy4">;</span>
<a href="cpp-error-assert.html"><span class="kw774">assert</span></a><span class="br0">(</span><span class="br0">(</span>rwe <span class="sy3">&amp;</span> read<span class="br0">)</span> <span class="sy3">&amp;&amp;</span> <span class="br0">(</span>rwe <span class="sy3">&amp;</span> write<span class="br0">)</span> <span class="sy3">&amp;&amp;</span> <span class="br0">(</span>rwe <span class="sy3">&amp;</span> exec<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
access_t x <span class="sy1">=</span> <span class="kw1">static_cast</span><span class="sy1">&lt;</span>access_t<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu16">8.0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// CWG1766 &#36215;&#26159;&#26410;&#23450;&#20041;&#34892;&#20026;</span>
access_t y <span class="sy1">=</span> <span class="kw1">static_cast</span><span class="sy1">&lt;</span>access_t<span class="sy1">&gt;</span><span class="br0">(</span><span class="nu0">8</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// CWG1766 &#36215;&#26159;&#26410;&#23450;&#20041;&#34892;&#20026;</span>
<span class="kw2">enum</span> foo <span class="br0">{</span> a <span class="sy1">=</span> <span class="nu0">0</span>, b <span class="sy1">=</span> <a href="cpp-types-climits.html"><span class="kw403">UINT_MAX</span></a> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#33539;&#22260;&#65306;[0, UINT_MAX]</span>
foo x<span class="sy1">=</span> foo<span class="br0">(</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// CWG1766 &#36215;&#26159;&#26410;&#23450;&#20041;&#34892;&#20026;&#65292;&#21363;&#20351; foo &#30340;&#24213;&#23618;&#31867;&#22411;&#26159; unsigned int</span></pre></div>
</div>
<p>&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;&#30340; <span class="t-spar">&#21517;&#23383;</span> &#21487;&#20197;&#24573;&#30053;&#65306;&#36825;&#31181;&#22768;&#26126;&#20165;&#23558;&#21508;&#26522;&#20030;&#39033;&#24341;&#20837;&#21040;&#20854;&#22806;&#22260;&#20316;&#29992;&#22495;&#20013;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> <span class="br0">{</span> a, b, c <span class="sy1">=</span> <span class="nu0">0</span>, d <span class="sy1">=</span> a <span class="sy2">+</span> <span class="nu0">2</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#23450;&#20041; a = 0, b = 1, c = 0, d = 2</span></pre></div>
</div>
<p>&#24403;&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;&#26159;&#31867;&#25104;&#21592;&#26102;&#65292;&#20854;&#26522;&#20030;&#39033;&#21487;&#20197;&#36890;&#36807;&#31867;&#25104;&#21592;&#35775;&#38382;&#36816;&#31639;&#31526; <code><b>.</b></code> &#21644; <code><b>-&gt;</b></code> &#35775;&#38382;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> X
<span class="br0">{</span>
<span class="kw2">enum</span> direction <span class="br0">{</span> left <span class="sy1">=</span> <span class="st0">&#39;l&#39;</span>, right <span class="sy1">=</span> <span class="st0">&#39;r&#39;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
X x<span class="sy4">;</span>
X<span class="sy2">*</span> p <span class="sy1">=</span> <span class="sy3">&amp;</span>x<span class="sy4">;</span>
<span class="kw4">int</span> a <span class="sy1">=</span> X<span class="sy4">::</span><span class="me2">direction</span><span class="sy4">::</span><span class="me2">left</span><span class="sy4">;</span> <span class="co1">// &#20165;&#20174; C++11 &#24320;&#22987;&#20801;&#35768;</span>
<span class="kw4">int</span> b <span class="sy1">=</span> X<span class="sy4">::</span><span class="me2">left</span><span class="sy4">;</span>
<span class="kw4">int</span> c <span class="sy1">=</span> x.<span class="me1">left</span><span class="sy4">;</span>
<span class="kw4">int</span> d <span class="sy1">=</span> p<span class="sy2">-</span><span class="sy1">&gt;</span>left<span class="sy4">;</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E6.9C.89.E4.BD.9C.E7.94.A8.E5.9F.9F.E6.9E.9A.E4.B8.BE">&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;</span></h3>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>enum</b></code> <code><b>struct|class</b></code> <span class="t-spar">&#21517;&#23383;</span> <code><b>{</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> ... <code><b>}</b></code></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>enum</b></code> <code><b>struct|class</b></code> <span class="t-spar">&#21517;&#23383;</span> <code><b>:</b></code> <span class="t-spar">&#31867;&#22411;</span> <code><b>{</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> <span class="t-spar">&#26522;&#20030;&#39033;</span> <code><b>=</b></code> <span class="t-spar">&#24120;&#37327;&#34920;&#36798;&#24335;</span> <code><b>,</b></code> ... <code><b>}</b></code></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>enum</b></code> <code><b>struct|class</b></code> <span class="t-spar">&#21517;&#23383;</span> <code><b>;</b></code></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>enum</b></code> <code><b>struct|class</b></code> <span class="t-spar">&#21517;&#23383;</span> <code><b>:</b></code> <span class="t-spar">&#31867;&#22411;</span> <code><b>;</b></code></td>
<td>(4)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<div class="t-li1"><span class="t-li">1)</span> &#22768;&#26126;&#24213;&#23618;&#31867;&#22411;&#20026; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span> &#30340;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;&#65288;&#20851;&#38190;&#35789; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">class</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">struct</span></span></span> &#23436;&#20840;&#31561;&#20215;&#65289;</div>
<div class="t-li1"><span class="t-li">2)</span> &#22768;&#26126;&#24213;&#23618;&#31867;&#22411;&#20026; <span class="t-spar">&#31867;&#22411;</span> &#30340;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;</div>
<div class="t-li1"><span class="t-li">3)</span> &#24213;&#23618;&#31867;&#22411;&#20026; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span> &#30340;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;&#30340;&#19981;&#21487;&#35265;&#26522;&#20030;&#22768;&#26126;</div>
<div class="t-li1"><span class="t-li">4)</span> &#24213;&#23618;&#31867;&#22411;&#20026; <span class="t-spar">&#31867;&#22411;</span> &#30340;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;&#30340;&#19981;&#21487;&#35265;&#26522;&#20030;&#22768;&#26126;</div>
<p>&#27599;&#20010; <span class="t-spar">&#26522;&#20030;&#39033;</span> &#37117;&#25104;&#20026;&#35813;&#26522;&#20030;&#30340;&#31867;&#22411;&#65288;&#21363; <span class="t-spar">&#21517;&#23383;</span>&#65289;&#30340;&#20855;&#21517;&#24120;&#37327;&#65292;&#23427;&#20026;&#35813;&#26522;&#20030;&#30340;&#20316;&#29992;&#22495;&#25152;&#21253;&#21547;&#65292;&#19988;&#21487;&#29992;&#20316;&#29992;&#22495;&#35299;&#26512;&#36816;&#31639;&#31526;&#35775;&#38382;&#12290;&#27809;&#26377;&#20174;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#39033;&#21040;&#25972;&#25968;&#31867;&#22411;&#30340;&#38544;&#24335;&#36716;&#25442;&#65292;&#23613;&#31649; <a href="cpp-language-static_cast.html"><code>static_cast</code></a> &#21487;&#29992;&#20110;&#33719;&#24471;&#26522;&#20030;&#39033;&#30340;&#25968;&#20540;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> <span class="kw1">class</span> Color <span class="br0">{</span> red, green <span class="sy1">=</span> <span class="nu0">20</span>, blue <span class="br0">}</span><span class="sy4">;</span>
Color r <span class="sy1">=</span> Color<span class="sy4">::</span><span class="me2">blue</span><span class="sy4">;</span>
<span class="kw1">switch</span><span class="br0">(</span>r<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">case</span> Color<span class="sy4">::</span><span class="me2">red</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;&#32418;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> Color<span class="sy4">::</span><span class="me2">green</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;&#32511;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> Color<span class="sy4">::</span><span class="me2">blue</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;&#34013;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// int n = r; // &#38169;&#35823;&#65306;&#19981;&#23384;&#22312;&#20174;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#21040; int &#30340;&#38544;&#24335;&#36716;&#25442;</span>
<span class="kw4">int</span> n <span class="sy1">=</span> <span class="kw1">static_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="br0">(</span>r<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK, n = 21</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx17">
<td>
<p>&#26522;&#20030;&#22312;&#28385;&#36275;&#19979;&#21015;&#26465;&#20214;&#26102;&#37117;&#33021;&#29992;<a href="cpp-language-list_initialization.html">&#21015;&#34920;&#21021;&#22987;&#21270;</a>&#20174;&#19968;&#20010;&#25972;&#25968;&#21021;&#22987;&#21270;&#32780;&#26080;&#38656;&#36716;&#22411;&#65306;</p>
<ul>
<li>&#21021;&#22987;&#21270;&#26159;&#30452;&#25509;&#21015;&#34920;&#21021;&#22987;&#21270;</li>
<li>&#21021;&#22987;&#21270;&#22120;&#21015;&#34920;&#20165;&#26377;&#21333;&#20010;&#20803;&#32032;</li>
<li>&#26522;&#20030;&#26159;&#24213;&#23618;&#31867;&#22411;&#22266;&#23450;&#30340;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#25110;&#26080;&#20316;&#29992;&#22495;&#26522;&#20030;</li>
<li>&#36716;&#25442;&#20026;&#38750;&#31364;&#21270;&#36716;&#25442;</li>
</ul>
<p>&#36825;&#20351;&#24471;&#25105;&#20204;&#33021;&#24341;&#20837;&#26032;&#30340;&#25972;&#25968;&#31867;&#22411;&#65288;&#20363;&#22914; SafeInt&#65289;&#24182;&#20139;&#21463;&#19982;&#20854;&#24213;&#23618;&#25972;&#25968;&#31867;&#22411;&#30456;&#21516;&#30340;&#26082;&#23384;&#35843;&#29992;&#32422;&#23450;&#65292;&#21363;&#20351; ABI &#19981;&#21033;&#20110;&#20197;&#20540;&#20256;&#36882;/&#36820;&#22238;&#32467;&#26500;&#20307;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> byte <span class="sy4">:</span> <span class="kw4">unsigned</span> <span class="kw4">char</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// byte &#26159;&#26032;&#30340;&#25972;&#25968;&#31867;&#22411;</span>
byte b <span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// C++17 &#36215; OK&#65288;&#30452;&#25509;&#21015;&#34920;&#21021;&#22987;&#21270;&#65289;</span>
byte c <span class="sy1">=</span> <span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;</span>
byte d <span class="sy1">=</span> byte<span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// C++17 &#36215; OK&#65307;&#19982; b &#30340;&#20540;&#30456;&#21516;</span>
byte e <span class="br0">{</span> <span class="sy2">-</span><span class="nu0">1</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;</span>
<span class="kw1">struct</span> A <span class="br0">{</span> byte b<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
A a1 <span class="sy1">=</span> <span class="br0">{</span> <span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65288;&#26500;&#36896;&#20989;&#25968;&#24418;&#21442;&#30340;&#22797;&#21046;&#21015;&#34920;&#21021;&#22987;&#21270;&#65289;</span>
A a2 <span class="sy1">=</span> <span class="br0">{</span> byte<span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// C++17 &#36215; OK</span>
<span class="kw4">void</span> f<span class="br0">(</span>byte<span class="br0">)</span><span class="sy4">;</span>
f<span class="br0">(</span><span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65288;&#20989;&#25968;&#24418;&#21442;&#30340;&#22797;&#21046;&#21015;&#34920;&#21021;&#22987;&#21270;&#65289;</span>
<span class="kw2">enum</span> <span class="kw1">class</span> Handle <span class="sy4">:</span> <a href="cpp-types-integer.html"><span class="kw122">std::<span class="me2">uint32_t</span></span></a> <span class="br0">{</span> Invalid <span class="sy1">=</span> <span class="nu0">0</span> <span class="br0">}</span><span class="sy4">;</span>
Handle h <span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// C++17 &#36215; OK</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<h3><span class="mw-headline" id="using_enum_.E5.A3.B0.E6.98.8E">using enum &#22768;&#26126;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>using</b></code> <code><b>enum</b></code> <span class="t-spar">&#23884;&#22871;&#21517;&#35828;&#26126;&#31526;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#21517;&#23383;</span> <code><b>;</b></code></td>
<td class="t-sdsc-nopad"></td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<p>&#20854;&#20013; <span class="t-spar">&#23884;&#22871;&#21517;&#35828;&#26126;&#31526;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#21517;&#23383;</span> &#19981;&#24471;&#25351;&#21517;<a href="cpp-language-dependent_name.html#.E5.BE.85.E5.86.B3.E7.B1.BB.E5.9E.8B">&#24453;&#20915;&#31867;&#22411;</a>&#19988;&#24517;&#39035;&#25351;&#21517;&#19968;&#20010;&#26522;&#20030;&#31867;&#22411;&#12290;</p>
<p>using enum &#22768;&#26126;&#24341;&#20837;&#20854;&#25152;&#25351;&#21517;&#30340;&#26522;&#20030;&#30340;&#26522;&#20030;&#39033;&#21517;&#23383;&#65292;&#22914;&#21516;&#29992;&#23545;&#27599;&#20010;&#26522;&#20030;&#39033;&#30340; <a href="cpp-language-using_declaration.html">using &#22768;&#26126;</a>&#12290;&#22312;&#31867;&#20316;&#29992;&#22495;&#20013;&#26102;&#65292;using enum &#22768;&#26126;&#23558;&#20854;&#25351;&#21517;&#30340;&#26522;&#20030;&#30340;&#26522;&#20030;&#39033;&#21517;&#23383;&#20316;&#20026;&#25104;&#21592;&#28155;&#21152;&#21040;&#20316;&#29992;&#22495;&#65292;&#20351;&#25104;&#21592;&#26597;&#25214;&#33021;&#35775;&#38382;&#23427;&#20204;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> <span class="kw1">class</span> fruit <span class="br0">{</span> orange, apple <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> S <span class="br0">{</span>
<span class="kw1">using</span> <span class="kw2">enum</span> fruit<span class="sy4">;</span> <span class="co1">// OK &#65306;&#24341;&#20837; orange &#19982; apple &#21040; S &#20013;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
S s<span class="sy4">;</span>
s.<span class="me1">orange</span><span class="sy4">;</span> <span class="co1">// OK &#65306;&#25351;&#21517; fruit::orange</span>
S<span class="sy4">::</span><span class="me2">orange</span><span class="sy4">;</span> <span class="co1">// OK &#65306;&#25351;&#21517; fruit::orange</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#24341;&#20837;&#20004;&#20010;&#21516;&#21517;&#30340;&#26522;&#20030;&#39033;&#30340;&#20004;&#20010; using enum &#22768;&#26126;&#20250;&#20914;&#31361;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> <span class="kw1">class</span> fruit <span class="br0">{</span> orange, apple <span class="br0">}</span><span class="sy4">;</span>
<span class="kw2">enum</span> <span class="kw1">class</span> color <span class="br0">{</span> red, orange <span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">using</span> <span class="kw2">enum</span> fruit<span class="sy4">;</span> <span class="co1">// OK</span>
<span class="co1">// using enum color; // &#38169;&#35823;&#65306;color::orange &#19982; fruit::orange &#20914;&#31361;</span>
<span class="br0">}</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>&#23613;&#31649;&#20174;&#33539;&#22260;&#22806;&#30340;&#20540;&#36716;&#25442;&#21040;&#26080;&#22266;&#23450;&#24213;&#23618;&#31867;&#22411;&#30340;&#26522;&#20030;&#30001; <a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue1766">CWG &#38382;&#39064; 1766</a> &#35774;&#20026;&#26410;&#23450;&#20041;&#34892;&#20026;&#65292;&#30446;&#21069;&#27809;&#26377;&#32534;&#35793;&#22120;&#22312;&#24120;&#37327;&#27714;&#20540;&#20013;&#23545;&#23427;&#36827;&#34892;&#35201;&#27714;&#30340;&#35786;&#26029;&#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">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;cstdint&gt;</span>
<span class="co1">// &#37319;&#29992; 16 &#20301;&#30340;&#26522;&#20030;</span>
<span class="kw2">enum</span> smallenum<span class="sy4">:</span> <a href="cpp-types-integer.html"><span class="kw107">std::<span class="me2">int16_t</span></span></a>
<span class="br0">{</span>
a,
b,
c
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// color &#21487;&#20026; red &#65288;&#20540;&#20026; 0&#65289;&#12289; yellow &#65288;&#20540;&#20026; 1&#65289;&#12289; green &#65288;&#20540;&#20026; 20&#65289;&#25110; blue &#65288;&#20540;&#20026; 21&#65289;</span>
<span class="kw2">enum</span> color
<span class="br0">{</span>
red,
yellow,
green <span class="sy1">=</span> <span class="nu0">20</span>,
blue
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// altitude &#21487;&#20026; altitude::high &#25110; altitude::low</span>
<span class="kw2">enum</span> <span class="kw1">class</span> altitude<span class="sy4">:</span> <span class="kw4">char</span>
<span class="br0">{</span>
high<span class="sy1">=</span><span class="st0">&#39;h&#39;</span>,
low<span class="sy1">=</span><span class="st0">&#39;l&#39;</span>, <span class="co1">// C++11 &#20801;&#35768;&#39069;&#22806;&#30340;&#36887;&#21495;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#24120;&#37327; d &#20026; 0&#65292;&#24120;&#37327; e &#20026; 1&#65292;&#24120;&#37327; f &#20026; 3</span>
<span class="kw2">enum</span>
<span class="br0">{</span>
d,
e,
f <span class="sy1">=</span> e <span class="sy2">+</span> <span class="nu0">2</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#26522;&#20030;&#31867;&#22411;&#65288;&#26377;&#20316;&#29992;&#22495;&#21644;&#26080;&#20316;&#29992;&#22495;&#65289;&#33021;&#26377;&#37325;&#36733;&#30340;&#36816;&#31639;&#31526;</span>
<a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> os, color c<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">switch</span><span class="br0">(</span>c<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">case</span> red <span class="sy4">:</span> os <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;red&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> yellow<span class="sy4">:</span> os <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;yellow&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> green <span class="sy4">:</span> os <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;green&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> blue <span class="sy4">:</span> os <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;blue&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">default</span> <span class="sy4">:</span> os.<span class="me1">setstate</span><span class="br0">(</span><a href="cpp-io-ios_base-iostate.html"><span class="kw1700">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">failbit</span></span></a><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw1">return</span> os<span class="sy4">;</span>
<span class="br0">}</span>
<a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> os, altitude al<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">return</span> os <span class="sy1">&lt;&lt;</span> <span class="kw1">static_cast</span><span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span><span class="br0">(</span>al<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// &#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#65288;C++11&#65289;&#33021;&#37096;&#20998;&#22320;&#22312;&#26089;&#26399; C++ &#29256;&#26412;&#27169;&#25311;&#65306;</span>
<span class="kw2">enum</span> <span class="kw1">struct</span> E11 <span class="br0">{</span> x, y <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// C++11 &#36215;</span>
<span class="kw1">struct</span> E98 <span class="br0">{</span> <span class="kw2">enum</span> <span class="br0">{</span> x, y <span class="br0">}</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// C++11 &#21069;&#20063; OK</span>
<span class="kw1">namespace</span> N98 <span class="br0">{</span> <span class="kw2">enum</span> <span class="br0">{</span> x, y <span class="br0">}</span><span class="sy4">;</span> <span class="br0">}</span> <span class="co1">// C++11 &#21069;&#20063; OK</span>
<span class="kw1">struct</span> S98 <span class="br0">{</span> <span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">int</span> x <span class="sy1">=</span> <span class="nu0">0</span>, y <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// C++11 &#21069;&#20063; OK</span>
<span class="kw4">void</span> emu<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="br0">(</span><span class="kw1">static_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="br0">(</span>E11<span class="sy4">::</span><span class="me2">y</span><span class="br0">)</span> <span class="sy2">+</span> E98<span class="sy4">::</span><span class="me2">y</span> <span class="sy2">+</span> N98<span class="sy4">::</span><span class="me2">y</span> <span class="sy2">+</span> S98<span class="sy4">::</span><span class="me2">y</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="co1">// 4</span>
<span class="br0">}</span>
<span class="kw1">namespace</span> cxx20
<span class="br0">{</span>
<span class="kw2">enum</span> <span class="kw1">class</span> long_long_long_name <span class="br0">{</span> x, y <span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> using_enum_demo<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;C++20 using enum: __cpp_using_enum == &quot;</span><span class="sy4">;</span>
<span class="kw1">switch</span> <span class="br0">(</span><span class="kw4">auto</span> rnd <span class="sy1">=</span> <span class="br0">[</span><span class="br0">]</span><span class="br0">{</span><span class="kw1">return</span> long_long_long_name<span class="sy4">::</span><span class="me2">x</span><span class="sy4">;</span><span class="br0">}</span><span class="sy4">;</span> rnd<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co2"># if defined(__cpp_using_enum)</span>
<span class="kw1">using</span> <span class="kw2">enum</span> long_long_long_name<span class="sy4">;</span>
<span class="kw1">case</span> x<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> __cpp_using_enum <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;; x<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> y<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> __cpp_using_enum <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;; y<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="co2"># else</span>
<span class="kw1">case</span> long_long_long_name<span class="sy4">::</span><span class="me2">x</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;?; x<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="kw1">case</span> long_long_long_name<span class="sy4">::</span><span class="me2">y</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;?; y<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="kw1">break</span><span class="sy4">;</span>
<span class="co2"># endif</span>
<span class="br0">}</span>
<span class="br0">}</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
color col <span class="sy1">=</span> red<span class="sy4">;</span>
altitude a<span class="sy4">;</span>
a <span class="sy1">=</span> altitude<span class="sy4">::</span><span class="me2">low</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;col = &quot;</span> <span class="sy1">&lt;&lt;</span> col <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span>
<span class="sy1">&lt;&lt;</span> <span class="st0">&quot;a = &quot;</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span>
<span class="sy1">&lt;&lt;</span> <span class="st0">&quot;f = &quot;</span> <span class="sy1">&lt;&lt;</span> f <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
cxx20<span class="sy4">::</span><span class="me2">using_enum_demo</span><span class="br0">(</span><span class="br0">)</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">col = red
a = l
f = 3
C++20 using enum: __cpp_using_enum == 201907; x</pre></div>
</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/issue1638">CWG 1638</a></td>
<td>C++11</td>
<td>&#19981;&#21487;&#35265;&#26522;&#20030;&#22768;&#26126;&#30340;&#25991;&#27861;&#31105;&#27490;&#29992;&#20110;&#27169;&#26495;&#29305;&#21270;</td>
<td>&#23481;&#35768;&#23884;&#22871;&#31867;&#22411;&#35828;&#26126;&#31526;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue1766">CWG 1766</a></td>
<td>C++98</td>
<td>&#20174;&#33539;&#22260;&#22806;&#30340;&#20540;&#36716;&#22411;&#21040;&#26080;&#22266;&#23450;&#24213;&#23618;&#31867;&#22411;&#30340;&#26522;&#20030;&#25317;&#26377;&#26410;&#25351;&#26126;&#30340;&#32467;&#26524;</td>
<td>&#34892;&#20026;&#26410;&#23450;&#20041;</td>
</tr>
</table>
<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>
<div class="t-dsc-member-div">
<div><a href="cpp-types-is_enum.html"><span class="t-lines"><span>is_enum</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#26816;&#26597;&#31867;&#22411;&#26159;&#21542;&#26159;&#26522;&#20030;&#31867;&#22411;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-types-is_scoped_enum.html"><span class="t-lines"><span>is_scoped_enum</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx23">(C++23)</span></span></span></div>
</div>
</td>
<td>&#26816;&#26597;&#31867;&#22411;&#26159;&#21542;&#20026;&#26377;&#20316;&#29992;&#22495;&#26522;&#20030;&#31867;&#22411;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-types-underlying_type.html"><span class="t-lines"><span>underlying_type</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#33719;&#21462;&#32473;&#23450;&#26522;&#20030;&#31867;&#22411;&#30340;&#24213;&#23618;&#25972;&#25968;&#31867;&#22411;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-utility-to_underlying.html"><span class="t-lines"><span>to_underlying</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx23">(C++23)</span></span></span></div>
</div>
</td>
<td>&#36716;&#25442;&#26522;&#20030;&#21040;&#20854;&#24213;&#23618;&#31867;&#22411;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>