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

129 lines
15 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>noexcept &#36816;&#31639;&#31526; (C++11 &#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_noexcept skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">noexcept &#36816;&#31639;&#31526; <span class="t-mark-rev t-since-cxx11">(C++11 &#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><code>noexcept</code> &#36816;&#31639;&#31526;&#36827;&#34892;&#32534;&#35793;&#26102;&#26816;&#26597;&#65292;&#22914;&#26524;&#34920;&#36798;&#24335;&#19981;&#20250;&#25243;&#20986;&#20219;&#20309;&#24322;&#24120;&#21017;&#36820;&#22238; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span>&#12290;</p>
<p>&#23427;&#21487;&#29992;&#20110;&#20989;&#25968;&#27169;&#26495;&#30340; <a href="cpp-language-noexcept_spec.html"><code>noexcept</code> &#35828;&#26126;&#31526;</a>&#20013;&#65292;&#20197;&#22768;&#26126;&#20989;&#25968;&#23558;&#23545;&#26576;&#20123;&#31867;&#22411;&#25243;&#20986;&#24322;&#24120;&#65292;&#20294;&#19981;&#23545;&#20854;&#20182;&#31867;&#22411;&#25243;&#20986;&#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 class="t-sdsc-nopad"><code><b>noexcept(</b></code> <span class="t-spar">&#34920;&#36798;&#24335;</span> <code><b>)</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>
<p>&#36820;&#22238; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> &#31867;&#22411;&#30340;<a href="cpp-language-value_category.html">&#32431;&#21491;&#20540;</a>&#12290;</p>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p><code>noexcept</code> &#36816;&#31639;&#31526;&#19981;&#20250;&#23545; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#27714;&#20540;&#12290;</p>
<p>&#22914;&#26524; <span class="t-rev-inl t-until-cxx17"><span><span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;<a href="cpp-language-except_spec.html"><i>&#28508;&#22312;&#24322;&#24120;</i></a>&#38598;&#21512;&#20026;&#31354;</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></span></span><span class="t-rev-inl t-since-cxx17"><span><span class="t-spar">&#34920;&#36798;&#24335;</span> <a href="cpp-language-noexcept_spec.html"><i>&#19981;&#20250;&#25243;&#20986;</i></a></span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span>&#65292;&#37027;&#20040;&#32467;&#26524;&#26159; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span>&#65292;&#21542;&#21017;&#32467;&#26524;&#26159; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span>&#12290;</p>
<h3><span class="mw-headline" id=".E5.85.B3.E9.94.AE.E8.AF.8D">&#20851;&#38190;&#35789;</span></h3>
<p><a href="cpp-keyword-noexcept.html"><tt>noexcept</tt></a></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;utility&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw4">void</span> may_throw<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">void</span> no_throw<span class="br0">(</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw4">auto</span> lmay_throw <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="kw4">auto</span> lno_throw <span class="sy1">=</span> <span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><span class="br0">)</span> <span class="kw1">noexcept</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">class</span> T
<span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
~T<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span><span class="br0">}</span> <span class="co1">// &#26512;&#26500;&#20989;&#25968;&#22952;&#30861;&#20102;&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;</span>
<span class="co1">// &#22797;&#21046;&#26500;&#36896;&#20989;&#25968;&#19981;&#20250;&#25243;&#20986;&#24322;&#24120;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">class</span> U
<span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
~U<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span><span class="br0">}</span> <span class="co1">// &#26512;&#26500;&#20989;&#25968;&#22952;&#30861;&#20102;&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;</span>
<span class="co1">// &#22797;&#21046;&#26500;&#36896;&#20989;&#25968;&#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;</span>
<a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> v<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">class</span> V
<span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> v<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
T t<span class="sy4">;</span>
U u<span class="sy4">;</span>
V v<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> <a href="cpp-io-manip-boolalpha.html"><span class="kw1764">std::<span class="me2">boolalpha</span></span></a>
<span class="sy1">&lt;&lt;</span> <span class="st0">&quot;may_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>may_throw<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <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;no_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>no_throw<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <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;lmay_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>lmay_throw<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <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;lno_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>lno_throw<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <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;~T() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span><a href="cpp-utility-declval.html"><span class="kw1120">std::<span class="me2">declval</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span>.~T<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span>
<span class="co1">// &#27880;&#65306;&#20197;&#19979;&#21508;&#39033;&#27979;&#35797;&#20063;&#35201;&#27714; ~T() &#19981;&#20250;&#25243;&#20986;&#24322;&#24120;</span>
<span class="co1">// &#22240;&#20026; noexcept &#20013;&#30340;&#34920;&#36798;&#24335;&#20250;&#26500;&#36896;&#24182;&#38144;&#27585;&#20020;&#26102;&#37327;</span>
<span class="sy1">&lt;&lt;</span> <span class="st0">&quot;T(T &#21491;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>T<span class="br0">(</span><a href="cpp-utility-declval.html"><span class="kw1120">std::<span class="me2">declval</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <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;T(T &#24038;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>T<span class="br0">(</span>t<span class="br0">)</span><span class="br0">)</span> <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;U(U &#21491;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>U<span class="br0">(</span><a href="cpp-utility-declval.html"><span class="kw1120">std::<span class="me2">declval</span></span></a><span class="sy1">&lt;</span>U<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <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;U(U &#24038;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>U<span class="br0">(</span>u<span class="br0">)</span><span class="br0">)</span> <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;V(V &#21491;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>V<span class="br0">(</span><a href="cpp-utility-declval.html"><span class="kw1120">std::<span class="me2">declval</span></span></a><span class="sy1">&lt;</span>V<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <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;V(V &#24038;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;&quot;</span> <span class="sy1">&lt;&lt;</span> <span class="sy3">!</span><span class="kw1">noexcept</span><span class="br0">(</span>V<span class="br0">(</span>v<span class="br0">)</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">may_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;true
no_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;false
lmay_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;true
lno_throw() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;false
~T() &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;false
T(T &#21491;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;false
T(T &#24038;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;false
U(U &#21491;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;true
U(U &#24038;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;true
V(V &#21491;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;false
V(V &#24038;&#20540;) &#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;&#21527;&#65311;true</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><a href="cpp-language-noexcept_spec.html"><code>noexcept</code> &#35828;&#26126;&#31526;</a><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
<td>&#25351;&#23450;&#20989;&#25968;&#26159;&#21542;&#25243;&#20986;&#24322;&#24120;</td>
</tr>
<tr class="t-dsc">
<td><a href="cpp-language-except_spec.html">&#21160;&#24577;&#24322;&#24120;&#35828;&#26126;</a><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></td>
<td>&#25351;&#23450;&#20989;&#25968;&#25152;&#25243;&#20986;&#30340;&#24322;&#24120; <span class="t-mark-rev t-deprecated-cxx11">(C++11 &#20013;&#24323;&#29992;)</span></td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>