76 lines
6.6 KiB
HTML
76 lines
6.6 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>C++ 属性: fallthrough (C++17 起)</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_attributes_fallthrough skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">C++ 属性:</span> fallthrough <span class="t-mark-rev t-since-cxx17">(C++17 起)</span></h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-language.html">language</a>‎ | <a href="cpp-language-attributes.html">attributes</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>指示从前一标号直落是有意的,而在发生直落时给出警告的编译器不应诊断它。</p>
|
|
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">语法</span></h3>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td class="t-sdsc-nopad"><code><b>[[fallthrough]]</b></code></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">解释</span></h3>
|
|
<p>仅可应用到<a href="cpp-language-statements.html#.E8.A1.A8.E8.BE.BE.E5.BC.8F.E8.AF.AD.E5.8F.A5">空语句</a>以创建<i>直落语句( fallthrough statement )</i>: <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">[</span><span class="br0">[</span>fallthrough<span class="br0">]</span><span class="br0">]</span><span class="sy4">;</span></span></span> 。</p>
|
|
<p>直落语句仅可用于 <a href="cpp-language-switch.html"><tt>switch</tt></a> 语句中,其中待执行的下个语句是该 switch 语句的带 case 或 default 标号的语句。若直落语句在循环中,则下个(带标号)语句必须是该循环的同一迭代的一部分。</p>
|
|
<p>指示从前一标号直落是有意的,而在发生直落时给出警告的编译器不应诊断它。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">int</span> n<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw4">void</span> g<span class="br0">(</span><span class="br0">)</span>, h<span class="br0">(</span><span class="br0">)</span>, i<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">switch</span> <span class="br0">(</span>n<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">case</span> <span class="nu0">1</span><span class="sy4">:</span>
|
|
<span class="kw1">case</span> <span class="nu0">2</span><span class="sy4">:</span>
|
|
g<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>fallthrough<span class="br0">]</span><span class="br0">]</span><span class="sy4">;</span>
|
|
<span class="kw1">case</span> <span class="nu0">3</span><span class="sy4">:</span> <span class="co1">// 直落时不警告</span>
|
|
h<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">case</span> <span class="nu0">4</span><span class="sy4">:</span> <span class="co1">// 编译器可在发生直落时警告</span>
|
|
<span class="kw1">if</span><span class="br0">(</span>n <span class="sy1"><</span> <span class="nu0">3</span><span class="br0">)</span> <span class="br0">{</span>
|
|
i<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">[</span><span class="br0">[</span>fallthrough<span class="br0">]</span><span class="br0">]</span><span class="sy4">;</span> <span class="co1">// OK</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">else</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">case</span> <span class="nu0">5</span><span class="sy4">:</span>
|
|
<span class="kw1">while</span> <span class="br0">(</span><span class="kw2">false</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="br0">[</span><span class="br0">[</span>fallthrough<span class="br0">]</span><span class="br0">]</span><span class="sy4">;</span> <span class="co1">// 非良构:下一语句不是同一迭代的一部分</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">case</span> <span class="nu0">6</span><span class="sy4">:</span>
|
|
<span class="br0">[</span><span class="br0">[</span>fallthrough<span class="br0">]</span><span class="br0">]</span><span class="sy4">;</span> <span class="co1">// 非良构:无后继的 case 或 default 标号</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin"></table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|