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

87 lines
17 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>&#24322;&#24120;</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_exceptions skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#24322;&#24120;</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>&#24322;&#24120;&#22788;&#29702;&#25552;&#20379;&#20102;&#19968;&#31181;&#21487;&#20197;&#20351;&#31243;&#24207;&#20174;&#25191;&#34892;&#30340;&#26576;&#28857;&#23558;&#25511;&#21046;&#27969;&#21644;&#20449;&#24687;&#36716;&#31227;&#21040;&#19982;&#25191;&#34892;&#20808;&#21069;&#32463;&#36807;&#30340;&#26576;&#28857;&#30456;&#20851;&#32852;&#30340;&#22788;&#29702;&#20195;&#30721;&#30340;&#26041;&#27861;&#65288;&#25442;&#35328;&#20043;&#65292;&#24322;&#24120;&#22788;&#29702;&#23558;&#25511;&#21046;&#26435;&#27839;&#35843;&#29992;&#26632;&#21521;&#19978;&#36716;&#31227;&#65289;&#12290;</p>
<p><a href="cpp-language-throw.html">throw &#34920;&#36798;&#24335;</a>&#12289;<a href="cpp-language-dynamic_cast.html">dynamic_cast</a>&#12289;<a href="cpp-language-typeid.html">typeid</a>&#12289;<a href="cpp-language-new.html">new &#34920;&#36798;&#24335;</a>&#12289;<a href="cpp-memory-new-operator_new.html">&#20998;&#37197;&#20989;&#25968;</a>&#65292;&#20197;&#21450;&#19987;&#38376;&#29992;&#26469;&#25243;&#20986;&#29305;&#23450;&#24322;&#24120;&#20197;&#25351;&#31034;&#29305;&#23450;&#38169;&#35823;&#29366;&#24577;&#30340;&#20219;&#20309;&#26631;&#20934;&#24211;&#20989;&#25968;&#65288;&#20363;&#22914; <span class="t-lc"><a href="cpp-container-vector-at.html">std::vector::at</a></span>&#12289;<span class="t-lc"><a href="cpp-string-basic_string-substr.html">std::string::substr</a></span> &#31561;&#65289;&#37117;&#21487;&#20197;&#25243;&#20986;&#24322;&#24120;&#12290;</p>
<p>&#20026;&#25429;&#33719;&#24322;&#24120;&#65292;throw &#34920;&#36798;&#24335;&#24517;&#39035;&#22312; <a href="cpp-language-try_catch.html">try &#22359;</a>&#25110;&#32773; try &#22359;&#20013;&#25152;&#35843;&#29992;&#30340;&#20989;&#25968;&#20013;&#65292;&#32780;&#19988;&#24517;&#39035;&#26377;&#19982;&#24322;&#24120;&#23545;&#35937;&#30340;&#31867;&#22411;&#30456;&#21305;&#37197;&#30340; <a href="cpp-language-try_catch.html">catch &#23376;&#21477;</a>&#12290;</p>
<p>&#22312;&#22768;&#26126;&#20989;&#25968;&#26102;&#65292;&#21487;&#20197;&#25552;&#20379;&#20197;&#19979;&#35828;&#26126;&#20197;&#38480;&#21046;&#20989;&#25968;&#33021;&#22815;&#25243;&#20986;&#30340;&#24322;&#24120;&#31867;&#22411;&#65306;</p>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx17">
<td>
<ul>
<li><a href="cpp-language-except_spec.html">&#21160;&#24577;&#24322;&#24120;&#35828;&#26126;</a></li>
</ul>
</td>
<td><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li><a href="cpp-language-noexcept_spec.html">noexcept &#35828;&#26126;</a></li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<p>&#24322;&#24120;&#22788;&#29702;&#36807;&#31243;&#20013;&#21457;&#29983;&#30340;&#38169;&#35823;&#30001; <span class="t-lc"><a href="cpp-error-terminate.html">std::terminate</a></span> <span class="t-rev-inl t-until-cxx17"><span>&#21644; <span class="t-lc"><a href="cpp-error-unexpected.html">std::unexpected</a></span></span> <span><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></span></span> &#22788;&#29702;&#12290;</p>
<h3><span class="mw-headline" id=".E7.94.A8.E6.B3.95">&#29992;&#27861;</span></h3>
<p>&#23613;&#31649; throw &#34920;&#36798;&#24335;&#36716;&#31227;&#25511;&#21046;&#21040;&#25191;&#34892;&#26632;&#19978;&#26041;&#30340;&#20219;&#24847;&#20195;&#30721;&#22359;&#26102;&#27809;&#26377;&#26465;&#20214;&#38480;&#21046;&#65288;&#31867;&#20284; <span class="t-lc"><a href="cpp-utility-program-longjmp.html">std::longjmp</a></span>&#65289;&#65292;&#20294;&#23427;&#30340;&#39044;&#26399;&#29992;&#36884;&#36824;&#26159;&#36827;&#34892;&#38169;&#35823;&#22788;&#29702;&#12290;</p>
<h4><span class="mw-headline" id=".E9.94.99.E8.AF.AF.E5.A4.84.E7.90.86">&#38169;&#35823;&#22788;&#29702;</span></h4>
<p>&#24322;&#24120;&#30340;&#25243;&#20986;&#29992;&#20110;&#20174;&#20989;&#25968;&#20013;&#20026;&#38169;&#35823;&#21457;&#20449;&#21495;&#65292;&#20854;&#20013;&ldquo;&#38169;&#35823;&rdquo;&#36890;&#24120;&#20165;&#38480;&#20110;&#20197;&#19979;&#20869;&#23481;<sup id="cite_ref-1" class="reference"><a href="cpp-language-exceptions.html#cite_note-1">[1]</a></sup><sup id="cite_ref-2" class="reference"><a href="cpp-language-exceptions.html#cite_note-2">[2]</a></sup><sup id="cite_ref-3" class="reference"><a href="cpp-language-exceptions.html#cite_note-3">[3]</a></sup>&#65306;</p>
<ol>
<li>&#26080;&#27861;&#28385;&#36275;&#21518;&#32622;&#26465;&#20214;&#65292;&#20363;&#22914;&#19981;&#33021;&#20135;&#29983;&#26377;&#25928;&#30340;&#36820;&#22238;&#20540;&#23545;&#35937;</li>
<li>&#26080;&#27861;&#28385;&#36275;&#21478;&#19968;&#20010;&#24517;&#39035;&#35843;&#29992;&#30340;&#20989;&#25968;&#30340;&#21069;&#32622;&#26465;&#20214;</li>
<li>&#65288;&#23545;&#20110;&#38750;&#31169;&#26377;&#25104;&#21592;&#20989;&#25968;&#65289;&#26080;&#27861;&#65288;&#20877;&#65289;&#24314;&#31435;&#31867;&#19981;&#21464;&#37327;</li>
</ol>
<p>&#36825;&#24847;&#21619;&#30528;&#26500;&#36896;&#20989;&#25968;&#65288;&#21442;&#38405; <a href="cpp-language-raii.html">RAII</a>&#65289;&#21644;&#22823;&#22810;&#25968;&#36816;&#31639;&#31526;&#24212;&#35813;&#36890;&#36807;&#25243;&#20986;&#24322;&#24120;&#26469;&#25253;&#21578;&#31243;&#24207;&#38169;&#35823;&#12290;</p>
<p>&#21478;&#22806;&#65292;&#25152;&#35859;<i>&#23485;&#22865;&#32422;&#65288;wide contract&#65289;</i>&#20989;&#25968;&#29992;&#24322;&#24120;&#26469;&#25351;&#31034;&#38750;&#27861;&#36755;&#20837;&#65292;&#20363;&#22914;&#65292;<span class="t-lc"><a href="cpp-string-basic_string-at.html">std::string::at</a></span> &#27809;&#26377;&#21069;&#32622;&#26465;&#20214;&#65292;&#20294;&#23427;&#20250;&#25243;&#20986;&#24322;&#24120;&#20197;&#25351;&#31034;&#19979;&#26631;&#36234;&#30028;&#12290;</p>
<h4><span class="mw-headline" id=".E5.BC.82.E5.B8.B8.E5.AE.89.E5.85.A8">&#24322;&#24120;&#23433;&#20840;</span></h4>
<p>&#22312;&#20989;&#25968;&#25253;&#21578;&#20102;&#38169;&#35823;&#29366;&#24577;&#21518;&#65292;&#21487;&#20197;&#25552;&#20379;&#38468;&#21152;&#20445;&#35777;&#20197;&#20445;&#38556;&#31243;&#24207;&#30340;&#29366;&#24577;&#12290;&#20197;&#19979;&#26159;&#22235;&#20010;&#34987;&#24191;&#27867;&#35748;&#21487;&#30340;&#24322;&#24120;&#20445;&#35777;&#31561;&#32423;<sup id="cite_ref-4" class="reference"><a href="cpp-language-exceptions.html#cite_note-4">[4]</a></sup><sup id="cite_ref-5" class="reference"><a href="cpp-language-exceptions.html#cite_note-5">[5]</a></sup><sup id="cite_ref-6" class="reference"><a href="cpp-language-exceptions.html#cite_note-6">[6]</a></sup>&#65292;&#27599;&#20010;&#26159;&#21478;&#19968;&#20010;&#30340;&#20005;&#26684;&#36229;&#38598;&#65306;</p>
<ol>
<li><i>&#19981;&#25243;&#20986;&#65288;nothrow&#65289;&#65288;&#25110;&#19981;&#22833;&#36133;&#65289;&#24322;&#24120;&#20445;&#35777;</i>&mdash;&mdash;&#20989;&#25968;&#22987;&#32456;&#19981;&#20250;&#25243;&#20986;&#24322;&#24120;&#12290;<a href="cpp-language-destructor.html">&#26512;&#26500;&#20989;&#25968;</a>&#21644;&#20854;&#20182;&#21487;&#33021;&#22312;&#26632;&#22238;&#28335;&#20013;&#35843;&#29992;&#30340;&#20989;&#25968;&#34987;&#26399;&#24453;&#20026;&#19981;&#20250;&#25243;&#20986;&#65288;&#20197;&#20854;&#20182;&#26041;&#24335;&#25253;&#21578;&#25110;&#38544;&#30610;&#38169;&#35823;&#65289;&#12290;<span class="t-rev-inl t-since-cxx11"><span><a href="cpp-language-destructor.html">&#26512;&#26500;&#20989;&#25968;</a>&#40664;&#35748;&#20026; <a href="cpp-language-noexcept.html">noexcept</a>&#12290;</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#20132;&#25442;&#20989;&#25968;&#65288;swap&#65289;&#65292;<a href="cpp-language-move_constructor.html">&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;</a>&#65292;&#21450;&#20026;&#25552;&#20379;&#24378;&#24322;&#24120;&#20445;&#35777;&#25152;&#20351;&#29992;&#30340;&#20854;&#20182;&#20989;&#25968;&#65292;&#37117;&#34987;&#26399;&#24453;&#20026;&#19981;&#20250;&#22833;&#36133;&#65288;&#20989;&#25968;&#24635;&#26159;&#25104;&#21151;&#65289;&#12290;</li>
<li><i>&#24378;&#65288;strong&#65289;&#24322;&#24120;&#20445;&#35777;</i>&mdash;&mdash;&#22914;&#26524;&#20989;&#25968;&#25243;&#20986;&#24322;&#24120;&#65292;&#37027;&#20040;&#31243;&#24207;&#30340;&#29366;&#24577;&#20250;&#24688;&#22909;&#34987;&#22238;&#28378;&#21040;&#35813;&#20989;&#25968;&#35843;&#29992;&#21069;&#30340;&#29366;&#24577;&#12290;&#65288;&#20363;&#22914; <span class="t-lc"><a href="cpp-container-vector-push_back.html">std::vector::push_back</a></span>&#65289;</li>
<li><i>&#22522;&#30784;&#65288;basic&#65289;&#24322;&#24120;&#20445;&#35777;</i>&mdash;&mdash;&#22914;&#26524;&#20989;&#25968;&#25243;&#20986;&#24322;&#24120;&#65292;&#37027;&#20040;&#31243;&#24207;&#22788;&#20110;&#26576;&#20010;&#26377;&#25928;&#29366;&#24577;&#12290;&#19981;&#27844;&#28431;&#36164;&#28304;&#65292;&#32780;&#25152;&#26377;&#23545;&#35937;&#30340;&#19981;&#21464;&#24335;&#37117;&#20445;&#25345;&#23436;&#22909;&#12290;</li>
<li><i>&#26080;&#24322;&#24120;&#20445;&#35777;</i>&mdash;&mdash;&#22914;&#26524;&#20989;&#25968;&#25243;&#20986;&#24322;&#24120;&#65292;&#37027;&#20040;&#31243;&#24207;&#21487;&#33021;&#19981;&#20250;&#22788;&#20110;&#26377;&#25928;&#30340;&#29366;&#24577;&#65306;&#21487;&#33021;&#24050;&#32463;&#21457;&#29983;&#20102;&#36164;&#28304;&#27844;&#28431;&#12289;&#20869;&#23384;&#25439;&#22351;&#65292;&#25110;&#20854;&#20182;&#25703;&#27585;&#19981;&#21464;&#24335;&#30340;&#38169;&#35823;&#12290;</li>
</ol>
<p>&#27492;&#22806;&#65292;&#27867;&#22411;&#32452;&#20214;&#36824;&#21487;&#20197;&#25552;&#20379;<i>&#24322;&#24120;&#20013;&#24615;&#65288;exception neutral&#65289;&#20445;&#35777;</i>&#65306;&#22914;&#26524;&#20174;&#26576;&#20010;&#27169;&#26495;&#24418;&#21442;&#65288;&#20363;&#22914;&#20174; <span class="t-lc"><a href="cpp-algorithm-sort.html">std::sort</a></span> &#30340; <code>Compare</code> &#20989;&#25968;&#23545;&#35937;&#65292;&#25110;&#20174; <span class="t-lc"><a href="cpp-memory-shared_ptr-make_shared.html">std::make_shared</a></span> &#20013; <code>T</code> &#30340;&#26500;&#36896;&#20989;&#25968;&#65289;&#25243;&#20986;&#24322;&#24120;&#65292;&#37027;&#20040;&#23427;&#20250;&#34987;&#26080;&#20462;&#25913;&#22320;&#20256;&#25773;&#32473;&#35843;&#29992;&#26041;&#12290;</p>
<h3><span class="mw-headline" id=".E5.BC.82.E5.B8.B8.E5.AF.B9.E8.B1.A1">&#24322;&#24120;&#23545;&#35937;</span></h3>
<p>&#34429;&#28982;&#20219;&#24847;&#23436;&#25972;&#31867;&#22411;&#21644;&#25351;&#21521; void &#30340; cv &#25351;&#38024;&#37117;&#33021;&#20316;&#20026;&#24322;&#24120;&#23545;&#35937;&#25243;&#20986;&#65292;&#20294;&#25152;&#26377;&#26631;&#20934;&#24211;&#20989;&#25968;&#37117;&#20197;&#20540;&#25243;&#20986;&#21311;&#21517;&#20020;&#26102;&#23545;&#35937;&#65292;&#32780;&#19988;&#36825;&#20123;&#23545;&#35937;&#30340;&#31867;&#22411;&#37117;&#65288;&#30452;&#25509;&#25110;&#38388;&#25509;&#65289;&#27966;&#29983;&#20110; <span class="t-lc"><a href="cpp-error-exception.html">std::exception</a></span>&#12290;&#29992;&#25143;&#23450;&#20041;&#30340;&#24322;&#24120;&#36890;&#24120;&#36981;&#24490;&#27492;&#27169;&#24335;&#12290;<sup id="cite_ref-7" class="reference"><a href="cpp-language-exceptions.html#cite_note-7">[7]</a></sup><sup id="cite_ref-8" class="reference"><a href="cpp-language-exceptions.html#cite_note-8">[8]</a></sup><sup id="cite_ref-9" class="reference"><a href="cpp-language-exceptions.html#cite_note-9">[9]</a></sup></p>
<p>&#20026;&#36991;&#20813;&#19981;&#24517;&#35201;&#30340;&#24322;&#24120;&#23545;&#35937;&#22797;&#21046;&#21644;&#23545;&#35937;&#20999;&#29255;&#65292;catch &#23376;&#21477;&#22312;&#23454;&#36341;&#20013;&#26368;&#22909;&#20197;&#24341;&#29992;&#25429;&#33719;&#12290;<sup id="cite_ref-10" class="reference"><a href="cpp-language-exceptions.html#cite_note-10">[10]</a></sup><sup id="cite_ref-11" class="reference"><a href="cpp-language-exceptions.html#cite_note-11">[11]</a></sup><sup id="cite_ref-12" class="reference"><a href="cpp-language-exceptions.html#cite_note-12">[12]</a></sup><sup id="cite_ref-13" class="reference"><a href="cpp-language-exceptions.html#cite_note-13">[13]</a></sup></p>
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">&#24341;&#29992;</span></h3>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-1">&uarr;</a></span> <span class="reference-text">H. Sutter (2004) <a rel="nofollow" class="external text" href="http://www.drdobbs.com/when-and-how-to-use-exceptions/184401836">&ldquo;&#20309;&#26102;&#21450;&#22914;&#20309;&#20351;&#29992;&#24322;&#24120;&rdquo;</a>&#20110; Dr. Dobb&#39;s</span></li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-2">&uarr;</a></span> <span class="reference-text">H.Sutter, A. Alexandrescu (2004)&#65292;&ldquo;C++ &#32534;&#30721;&#26631;&#20934;&rdquo;&#65292;&#31532; 70 &#26465;</span></li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-3">&uarr;</a></span> <span class="reference-text">C++ &#26680;&#24515;&#25351;&#23548;&#26041;&#38024; <a rel="nofollow" class="external text" href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i10-use-exceptions-to-signal-a-failure-to-perform-a-required-task">I.10</a></span></li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-4">&uarr;</a></span> <span class="reference-text">B. Stroustrup (2000)&#65292;&ldquo;C++ &#31243;&#24207;&#35821;&#35328;&rdquo; <a rel="nofollow" class="external text" href="http://stroustrup.com/3rd_safe.pdf">&ldquo;&#38468;&#24405; E&rdquo;</a></span></li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-5">&uarr;</a></span> <span class="reference-text">H. Sutter (2000) &ldquo;Exceptional C++&rdquo;</span></li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-6">&uarr;</a></span> <span class="reference-text">D. Abrahams (2001) <a rel="nofollow" class="external text" href="http://www.boost.org/community/exception_safety.html">&ldquo;&#27867;&#22411;&#32452;&#20214;&#20013;&#30340;&#24322;&#24120;&#23433;&#20840;&rdquo;</a></span></li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-7">&uarr;</a></span> <span class="reference-text">D. Abrahams (2001) <a rel="nofollow" class="external text" href="http://www.boost.org/community/error_handling.html">&ldquo;&#38169;&#35823;&#19982;&#24322;&#24120;&#22788;&#29702;&rdquo;</a></span></li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-8">&uarr;</a></span> <span class="reference-text">isocpp.org Super-FAQ <a rel="nofollow" class="external text" href="https://isocpp.org/wiki/faq/exceptions#what-to-throw">&ldquo;&#25105;&#24212;&#35813;&#25243;&#20986;&#20160;&#20040;&#65311;&rdquo;</a></span></li>
<li id="cite_note-9"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-9">&uarr;</a></span> <span class="reference-text">C++ &#26680;&#24515;&#25351;&#23548;&#26041;&#38024; <a rel="nofollow" class="external text" href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e14-use-purpose-designed-user-defined-types-as-exceptions-not-built-in-types">E.14</a></span></li>
<li id="cite_note-10"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-10">&uarr;</a></span> <span class="reference-text">C++ &#26680;&#24515;&#25351;&#23548;&#26041;&#38024; <a rel="nofollow" class="external text" href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e15-catch-exceptions-from-a-hierarchy-by-reference">E.15</a></span></li>
<li id="cite_note-11"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-11">&uarr;</a></span> <span class="reference-text">S. Meyers (1996) &ldquo;More Effective C++&rdquo; &#31532; 13 &#26465;</span></li>
<li id="cite_note-12"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-12">&uarr;</a></span> <span class="reference-text">isocpp.org &#36229;&#32423; FAQ <a rel="nofollow" class="external text" href="https://isocpp.org/wiki/faq/exceptions#what-to-catch">&ldquo;&#25105;&#24212;&#35813;&#25429;&#33719;&#20160;&#20040;&#65311;&rdquo;</a></span></li>
<li id="cite_note-13"><span class="mw-cite-backlink"><a href="cpp-language-exceptions.html#cite_ref-13">&uarr;</a></span> <span class="reference-text">H.Sutter, A. Alexandrescu (2004) &ldquo;C++ &#32534;&#30721;&#26631;&#20934;&rdquo; &#31532; 73 &#26465;</span></li>
</ol>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>