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

492 lines
50 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>&#29983;&#23384;&#26399;</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_lifetime skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#29983;&#23384;&#26399;</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>&#27599;&#20010;<a href="cpp-language-object.html">&#23545;&#35937;</a>&#21644;<a href="cpp-language-reference.html">&#24341;&#29992;</a>&#37117;&#26377;<i>&#29983;&#23384;&#26399; (lifetime)</i> &#65292;&#36825;&#26159;&#19968;&#39033;&#36816;&#34892;&#26102;&#24615;&#36136;&#65306;&#27599;&#20010;&#23545;&#35937;&#25110;&#24341;&#29992;&#22312;&#31243;&#24207;&#25191;&#34892;&#26102;&#37117;&#23384;&#22312;&#19968;&#20010;&#26102;&#21051;&#24320;&#22987;&#20854;&#29983;&#23384;&#26399;&#65292;&#20063;&#37117;&#23384;&#22312;&#19968;&#20010;&#26102;&#21051;&#32467;&#26463;&#20854;&#29983;&#23384;&#26399;&#12290;</p>
<p>&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#22987;&#20110;&#65306;</p>
<ul>
<li>&#33719;&#24471;&#25317;&#26377;&#20854;&#31867;&#22411;&#30340;&#27491;&#30830;&#22823;&#23567;&#19982;&#23545;&#40784;&#30340;&#23384;&#20648;&#65292;&#24182;&#19988;</li>
<li>&#23436;&#25104;&#20854;&#21021;&#22987;&#21270;&#65288;&#33509;&#23384;&#22312;&#65289;&#65288;&#21253;&#25324;&#19981;&#32463;&#30001;&#26500;&#36896;&#20989;&#25968;&#25110;&#32463;&#30001;<a href="cpp-language-default_constructor.html#.E5.B9.B3.E5.87.A1.E9.BB.98.E8.AE.A4.E6.9E.84.E9.80.A0.E5.87.BD.E6.95.B0">&#24179;&#20961;&#40664;&#35748;&#26500;&#36896;&#20989;&#25968;</a>&#30340;<a href="cpp-language-default_initialization.html">&#40664;&#35748;&#21021;&#22987;&#21270;</a>&#65289;&#65292;&#38500;&#38750;</li>
</ul>
<dl>
<dd>
<ul>
<li>&#33509;&#35813;&#23545;&#35937;&#26159;<a href="cpp-language-union.html#.E6.88.90.E5.91.98.E7.94.9F.E5.AD.98.E6.9C.9F">&#32852;&#21512;&#20307;&#25104;&#21592;</a>&#25110;&#20854;&#23376;&#23545;&#35937;&#65292;&#21017;&#20854;&#29983;&#23384;&#26399;&#22312;&#35813;&#32852;&#21512;&#20307;&#25104;&#21592;&#26159;&#32852;&#21512;&#20307;&#20013;&#30340;&#34987;&#21021;&#22987;&#21270;&#25104;&#21592;&#65292;&#25110;&#23427;&#34987;&#35774;&#20026;&#27963;&#36291;&#25165;&#24320;&#22987;&#65292;&#25110;&#32773;</li>
<li>&#33509;&#35813;&#23545;&#35937;&#20869;&#23884;&#20110;&#32852;&#21512;&#20307;&#23545;&#35937;&#65292;&#21017;&#20854;&#29983;&#23384;&#26399;&#24320;&#22987;&#20110;&#24179;&#20961;&#29305;&#27530;&#25104;&#21592;&#20989;&#25968;&#36171;&#20540;&#25110;&#26500;&#36896;&#21547;&#26377;&#23427;&#30340;&#32852;&#21512;&#20307;&#23545;&#35937;&#65292;&#25110;&#32773;</li>
<li>&#25968;&#32452;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#21487;&#20197;&#22240;&#20026;&#35813;&#23545;&#35937;&#34987; <span class="t-lc"><a href="cpp-memory-allocator-allocate.html">std::allocator::allocate</a></span> &#20998;&#37197;&#32780;&#24320;&#22987;&#12290;</li>
</ul>
</dd>
</dl>
<p>&#26576;&#20123;&#25805;&#20316;&#22312;&#32473;&#23450;&#30340;&#23384;&#20648;&#21306;&#22495;&#20013;<a href="cpp-language-object.html#.E5.AF.B9.E8.B1.A1.E5.88.9B.E5.BB.BA">&#38544;&#24335;&#21019;&#24314;&#23545;&#35937;</a>&#65292;&#24182;&#24320;&#22987;&#20854;&#29983;&#23384;&#26399;&#65292;&#36825;&#20123;&#23545;&#35937;&#25317;&#26377;&#38544;&#24335;&#29983;&#23384;&#26399;&#31867;&#22411;&#65288;&#35265;&#21518;&#36848;&#65289;&#12290;</p>
<p>&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#32467;&#26463;&#20110;&#65306;</p>
<ul>
<li>&#33509;&#23427;&#25317;&#26377;&#38750;&#31867;&#31867;&#22411;&#65292;&#21017;&#20026;&#38144;&#27585;&#35813;&#23545;&#35937;&#26102;&#65288;&#21487;&#33021;&#32463;&#30001;&#20266;&#26512;&#26500;&#20989;&#25968;&#35843;&#29992;&#65289;&#65292;&#25110;&#32773;</li>
<li>&#33509;&#23427;&#25317;&#26377;&#31867;&#31867;&#22411;&#65292;&#21017;&#20026;<a href="cpp-language-destructor.html">&#26512;&#26500;&#20989;&#25968;</a>&#35843;&#29992;&#24320;&#22987;&#26102;&#65292;&#25110;&#32773;</li>
<li>&#35813;&#23545;&#35937;&#25152;&#21344;&#25454;&#30340;&#23384;&#20648;&#34987;&#37322;&#25918;&#65292;&#25110;&#34987;&#19981;&#20869;&#23884;&#20110;&#23427;&#30340;&#23545;&#35937;&#25152;&#37325;&#29992;&#12290;</li>
</ul>
<p>&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#19982;&#23427;&#30340;&#23384;&#20648;&#30340;&#29983;&#23384;&#26399;&#30456;&#21516;&#65292;&#25110;&#32773;&#20869;&#23884;&#20110;&#20854;&#20013;&#65292;&#21442;&#35265;<a href="cpp-language-storage_duration.html">&#23384;&#20648;&#26399;</a>&#12290;</p>
<p><a href="cpp-language-reference.html">&#24341;&#29992;</a>&#30340;&#29983;&#23384;&#26399;&#65292;&#20174;&#20854;&#21021;&#22987;&#21270;&#23436;&#25104;&#20043;&#26102;&#24320;&#22987;&#65292;&#24182;&#19982;&#26631;&#37327;&#23545;&#35937;&#20197;&#30456;&#21516;&#30340;&#26041;&#24335;&#32467;&#26463;&#12290;</p>
<p>&#27880;&#24847;&#65306;&#34987;&#24341;&#29992;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#21487;&#33021;&#22312;&#24341;&#29992;&#30340;&#29983;&#23384;&#26399;&#32467;&#26463;&#20043;&#21069;&#23601;&#20250;&#32467;&#26463;&#65292;&#36825;&#20250;&#36896;&#25104;<a href="cpp-language-reference.html#.E6.82.AC.E5.9E.82.E5.BC.95.E7.94.A8">&#24748;&#22402;&#24341;&#29992;</a>&#12290;</p>
<p>&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#21644;&#22522;&#31867;&#23376;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#65292;&#25353;&#29031;<a href="cpp-language-initializer_list.html#.E5.88.9D.E5.A7.8B.E5.8C.96.E9.A1.BA.E5.BA.8F" class="mw-redirect">&#31867;&#21021;&#22987;&#21270;&#39034;&#24207;</a>&#24320;&#22987;&#21644;&#32467;&#26463;&#12290;</p>
<h3><span class="mw-headline" id=".E9.9A.90.E5.BC.8F.E7.94.9F.E5.AD.98.E6.9C.9F.E7.B1.BB.E5.9E.8B">&#38544;&#24335;&#29983;&#23384;&#26399;&#31867;&#22411;</span></h3>
<p>&#19968;&#20010;&#23545;&#35937;&#31867;&#22411;&#34987;&#31216;&#20026;<i>&#38544;&#24335;&#29983;&#23384;&#26399;&#31867;&#22411;</i>&#65292;&#33509;&#23427;&#26159;&#65306;</p>
<ul>
<li>&#26631;&#37327;&#31867;&#22411;&#65292;&#25110;</li>
<li>&#25968;&#32452;&#31867;&#22411;&#65292;&#25110;</li>
<li><a href="cpp-language-aggregate_initialization.html">&#32858;&#21512;&#31867;</a>&#31867;&#22411;&#65292;&#25110;</li>
<li>&#25317;&#26377;&#19979;&#21015;&#25104;&#21592;&#30340;&#31867;&#31867;&#22411;</li>
</ul>
<dl>
<dd>
<ul>
<li>&#33267;&#23569;&#19968;&#20010;&#24179;&#20961;&#30340;&#21512;&#26684;&#26500;&#36896;&#20989;&#25968;&#65292;&#20197;&#21450;</li>
<li>&#19968;&#20010;&#24179;&#20961;&#19988;&#26410;&#34987;&#21024;&#38500;&#30340;&#26512;&#26500;&#20989;&#25968;&#65292;</li>
</ul>
</dd>
</dl>
<ul>
<li>&#25110;&#19978;&#36848;&#31867;&#22411;&#20043;&#19968;&#30340; cv &#38480;&#23450;&#29256;&#26412;&#12290;</li>
</ul>
<p>&#27880;&#24847;&#33509;&#38544;&#24335;&#21019;&#24314;&#30340;&#23545;&#35937;&#30340;&#23376;&#23545;&#35937;&#19981;&#25317;&#26377;&#38544;&#24335;&#29983;&#23384;&#26399;&#31867;&#22411;&#65292;&#21017;&#20854;&#29983;&#23384;&#26399;&#19981;&#20250;&#38544;&#24335;&#24320;&#22987;&#12290;</p>
<h3><span class="mw-headline" id=".E4.B8.B4.E6.97.B6.E5.AF.B9.E8.B1.A1.E7.9A.84.E7.94.9F.E5.AD.98.E6.9C.9F">&#20020;&#26102;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;</span></h3>
<p>&#22312;&#19979;&#21015;&#24773;&#20917;&#20013;<span class="t-rev-inl t-since-cxx17"><span>&#36827;&#34892;&#32431;&#21491;&#20540;&#30340;<a href="cpp-language-implicit_conversion.html#.E4.B8.B4.E6.97.B6.E9.87.8F.E5.AE.9E.E8.B4.A8.E5.8C.96">&#23454;&#36136;&#21270;</a>&#65292;&#20174;&#32780;&#33021;&#23558;&#23427;&#20316;&#20026;&#27867;&#24038;&#20540;&#20351;&#29992;&#65292;&#21363;</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span>&#21019;&#24314;&#20020;&#26102;&#23545;&#35937;&#65306;</p>
<ul>
<li><a href="cpp-language-reference_initialization.html">&#32465;&#23450;&#24341;&#29992;&#21040;&#32431;&#21491;&#20540;</a></li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li>&#20197;&#33457;&#25324;&#21495;&#21021;&#22987;&#21270;&#22120;&#21015;&#34920;<a href="cpp-language-list_initialization.html">&#21021;&#22987;&#21270;</a> <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-initializer_list.html"><span class="kw960">std::<span class="me2">initializer_list</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span></span></span> &#31867;&#22411;&#30340;&#23545;&#35937;&#26102;</li>
</ul>
</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-until-cxx17">
<td>
<ul>
<li>&#20989;&#25968;&#36820;&#22238;&#32431;&#21491;&#20540;</li>
<li>&#21019;&#24314;&#32431;&#21491;&#20540;&#30340;<a href="cpp-language-expressions.html#.E8.BD.AC.E6.8D.A2">&#31867;&#22411;&#36716;&#25442;</a>&#65292;<a href="cpp-language-explicit_cast.html">&#21253;&#25324;</a> <span class="t-c"><span class="mw-geshi cpp source-cpp">T<span class="br0">(</span>a,b,c<span class="br0">)</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp">T<span class="br0">{</span><span class="br0">}</span></span></span>&#65289;&#65292;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li><a href="cpp-language-lambda.html">lambda &#34920;&#36798;&#24335;</a></li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<ul>
<li>&#35201;&#27714;&#23545;&#21021;&#22987;&#21270;&#22120;&#36827;&#34892;&#31867;&#22411;&#36716;&#25442;&#30340;<a href="cpp-language-copy_initialization.html">&#22797;&#21046;&#21021;&#22987;&#21270;</a>&#65292;</li>
<li><a href="cpp-language-reference_initialization.html">&#23558;&#24341;&#29992;&#32465;&#23450;</a>&#21040;&#19981;&#21516;&#20294;&#21487;&#20197;&#36716;&#25442;&#30340;&#31867;&#22411;&#65292;&#25110;&#32465;&#23450;&#21040;&#20301;&#22495;&#12290;</li>
</ul>
</td>
<td><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></td>
</tr>
<tr class="t-rev t-since-cxx17">
<td>
<ul>
<li>&#24403;&#23545;&#31867;&#31867;&#22411;&#30340;&#32431;&#21491;&#20540;&#36827;&#34892;<a href="cpp-language-operator_member_access.html#.E5.86.85.E5.BB.BA.E7.9A.84.E6.88.90.E5.91.98.E8.AE.BF.E9.97.AE.E8.BF.90.E7.AE.97.E7.AC.A6">&#25104;&#21592;&#35775;&#38382;</a>&#26102;</li>
<li>&#24403;&#23545;&#25968;&#32452;&#32431;&#21491;&#20540;&#36827;&#34892;<a href="cpp-language-array.html#.E6.95.B0.E7.BB.84.E5.88.B0.E6.8C.87.E9.92.88.E9.80.80.E5.8C.96">&#25968;&#32452;&#21521;&#25351;&#38024;</a>&#36716;&#25442;&#25110;&#32773;<a href="cpp-language-operator_member_access.html#.E5.86.85.E5.BB.BA.E7.9A.84.E4.B8.8B.E6.A0.87.E8.BF.90.E7.AE.97.E7.AC.A6">&#19979;&#26631;&#36816;&#31639;</a>&#26102;</li>
<li>&#23545; <a href="cpp-language-sizeof.html"><code>sizeof</code></a> &#21644; <a href="cpp-language-typeid.html"><code>typeid</code></a> &#30340;&#19981;&#27714;&#20540;&#25805;&#20316;&#25968;</li>
<li>&#24403;&#32431;&#21491;&#20540;&#34987;&#29992;&#20316;<a href="cpp-language-expressions.html#.E5.BC.83.E5.80.BC.E8.A1.A8.E8.BE.BE.E5.BC.8F">&#24323;&#20540;&#34920;&#36798;&#24335;</a>&#26102;</li>
<li>&#22914;&#26524;&#23454;&#29616;&#25903;&#25345;&#30340;&#35805;&#65292;&#22312;<a href="cpp-language-operator_other.html#.E5.86.85.E5.BB.BA.E7.9A.84.E5.87.BD.E6.95.B0.E8.B0.83.E7.94.A8.E8.BF.90.E7.AE.97.E7.AC.A6">&#20989;&#25968;&#35843;&#29992;&#34920;&#36798;&#24335;</a>&#20013;&#20256;&#36882;&#25110;&#32773;&#36820;&#22238;<a href="cpp-named_req-TriviallyCopyable.html"><span style="font-style:italic">&#21487;&#24179;&#20961;&#22797;&#21046;</span> <span style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; font-style:italic">(TriviallyCopyable)</span></a> &#30340;&#31867;&#22411;&#30340;&#23545;&#35937;&#65288;&#36825;&#23545;&#24212;&#30340;&#26159;&#22312; CPU &#23492;&#23384;&#22120;&#20013;&#20256;&#36882;&#32467;&#26500;&#20307;&#30340;&#24773;&#20917;&#65289;&#26102;</li>
<li>&#20020;&#26102;&#23545;&#35937;&#30340;&#23454;&#36136;&#21270;&#36890;&#24120;&#20250;&#23613;&#21487;&#33021;&#22320;&#34987;&#25512;&#36831;&#65292;&#20197;&#20813;&#21019;&#24314;&#19981;&#24517;&#35201;&#30340;&#20020;&#26102;&#23545;&#35937;&#65306;&#21442;&#35265;<a href="cpp-language-copy_elision.html">&#22797;&#21046;&#28040;&#38500;</a></li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></td>
</tr>
</table>
<p>&#25152;&#26377;&#20020;&#26102;&#23545;&#35937;&#30340;&#38144;&#27585;&#37117;&#26159;&#22312;&#65288;&#35789;&#27861;&#19978;&#65289;&#21253;&#21547;&#21019;&#24314;&#23427;&#30340;&#20301;&#32622;&#30340;&#20840;&#34920;&#36798;&#24335;&#30340;&#27714;&#20540;&#36807;&#31243;&#30340;&#26368;&#21518;&#19968;&#27493;&#36827;&#34892;&#30340;&#65292;&#32780;&#24403;&#21019;&#24314;&#20102;&#22810;&#20010;&#20020;&#26102;&#23545;&#35937;&#26102;&#65292;&#23427;&#20204;&#26159;&#20197;&#20854;&#21019;&#24314;&#30340;&#30456;&#21453;&#39034;&#24207;&#38144;&#27585;&#30340;&#12290;&#21363;&#20415;&#27714;&#20540;&#36807;&#31243;&#20197;&#25243;&#20986;&#24322;&#24120;&#32780;&#32456;&#27490;&#20063;&#26159;&#22914;&#27492;&#12290;</p>
<p>&#23545;&#27492;&#26377;&#20004;&#31181;&#20363;&#22806;&#24773;&#20917;&#65306;</p>
<ul>
<li>&#21487;&#20197;&#36890;&#36807;&#32465;&#23450;&#21040; const &#24038;&#20540;&#24341;&#29992;<span class="t-rev-inl t-since-cxx11"><span>&#25110;&#21491;&#20540;&#24341;&#29992;</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#26469;&#24310;&#38271;&#20020;&#26102;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#65292;&#32454;&#33410;&#35265;<a href="cpp-language-reference_initialization.html#.E4.B8.B4.E6.97.B6.E9.87.8F.E7.94.9F.E5.AD.98.E6.9C.9F">&#24341;&#29992;&#21021;&#22987;&#21270;</a>&#12290;</li>
<li>&#22312;&#23545;&#25968;&#32452;&#30340;&#26576;&#20010;&#20803;&#32032;&#20351;&#29992;&#21547;&#26377;&#40664;&#35748;&#23454;&#21442;&#30340;&#40664;&#35748;&#25110;&#22797;&#21046;&#26500;&#36896;&#20989;&#25968;&#36827;&#34892;&#21021;&#22987;&#21270;&#26102;&#65292;&#23545;&#35813;&#40664;&#35748;&#23454;&#21442;&#27714;&#20540;&#25152;&#21019;&#24314;&#30340;&#20020;&#26102;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#23558;&#22312;&#35813;&#25968;&#32452;&#30340;&#19979;&#19968;&#20010;&#20803;&#32032;&#30340;&#21021;&#22987;&#21270;&#24320;&#22987;&#20043;&#21069;&#32456;&#27490;&#12290;</li>
</ul>
<h3><span class="mw-headline" id=".E5.AD.98.E5.82.A8.E7.9A.84.E9.87.8D.E7.94.A8">&#23384;&#20648;&#30340;&#37325;&#29992;</span></h3>
<p>&#22914;&#26524;&#23545;&#35937;<a href="cpp-language-destructor.html#.E5.B9.B3.E5.87.A1.E6.9E.90.E6.9E.84.E5.87.BD.E6.95.B0">&#21487;&#24179;&#20961;&#26512;&#26500;</a>&#65292;&#25110;&#32773;&#31243;&#24207;&#24182;&#19981;&#20381;&#36182;&#26512;&#26500;&#20989;&#25968;&#20013;&#30340;&#21103;&#20316;&#29992;&#30340;&#35805;&#65292;&#31243;&#24207;&#19981;&#24517;&#35843;&#29992;&#35813;&#23545;&#35937;&#30340;&#26512;&#26500;&#20989;&#25968;&#12290;&#28982;&#32780;&#22914;&#26524;&#31243;&#24207;&#26174;&#24335;&#32456;&#27490;&#38750;&#21487;&#24179;&#20961;&#26512;&#26500;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#30340;&#35805;&#65292;&#23427;&#24517;&#39035;&#30830;&#20445;&#22312;&#21487;&#33021;&#38544;&#24335;&#22320;&#35843;&#29992;&#26512;&#26500;&#20989;&#25968;&#21069;&#65288;&#20363;&#22914;&#23545;&#20110;&#33258;&#21160;&#23545;&#35937;&#26159;&#30001;&#20110;&#36864;&#20986;&#20316;&#29992;&#22495;&#25110;&#21457;&#29983;&#24322;&#24120;&#65292;&#23545;&#20110;&#32447;&#31243;&#23616;&#37096;&#23545;&#35937;&#26159;&#30001;&#20110;&#32447;&#31243;&#36864;&#20986;&#65292;&#25110;&#23545;&#20110;&#38745;&#24577;&#23545;&#35937;&#26159;&#30001;&#20110;&#31243;&#24207;&#36864;&#20986;&#65289;&#65292;&#21407;&#20301;&#26500;&#36896;&#65288;&#27604;&#22914;&#20351;&#29992;&#24067;&#32622; new &#65289;&#19968;&#20010;&#26032;&#30340;&#21516;&#31867;&#22411;&#23545;&#35937;&#65307;&#21542;&#21017;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> T <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#24179;&#20961;</span>
<span class="kw1">struct</span> B <span class="br0">{</span>
~B<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span> <span class="co1">// &#38750;&#24179;&#20961;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> x<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">long</span> <span class="kw4">long</span> n<span class="sy4">;</span> <span class="co1">// &#33258;&#21160;&#12289;&#24179;&#20961;</span>
new <span class="br0">(</span><span class="sy3">&amp;</span>n<span class="br0">)</span> <span class="kw4">double</span><span class="br0">(</span><span class="nu16">3.14</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20197;&#19981;&#21516;&#30340;&#31867;&#22411;&#36827;&#34892;&#37325;&#29992;&#27809;&#26377;&#38382;&#39064;</span>
<span class="br0">}</span> <span class="co1">// OK</span>
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
B b<span class="sy4">;</span> <span class="co1">// &#33258;&#21160;&#30340;&#38750;&#21487;&#24179;&#20961;&#26512;&#26500;&#23545;&#35937;</span>
b.~B<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#29983;&#23384;&#26399;&#32467;&#26463;&#65288;&#19981;&#24517;&#35201;&#65292;&#22240;&#20026;&#27809;&#26377;&#21103;&#20316;&#29992;&#65289;</span>
new <span class="br0">(</span><span class="sy3">&amp;</span>b<span class="br0">)</span> T<span class="sy4">;</span> <span class="co1">// &#31867;&#22411;&#38169;&#35823;&#65306;&#30452;&#21040;&#26512;&#26500;&#20989;&#25968;&#34987;&#35843;&#29992;&#20043;&#21069;&#37117;&#27809;&#38382;&#39064;</span>
<span class="br0">}</span> <span class="co1">// &#35843;&#29992;&#20102;&#26512;&#26500;&#20989;&#25968;&#65306;&#26410;&#23450;&#20041;&#34892;&#20026;</span></pre></div>
</div>
<p>&#37325;&#29992;&#26576;&#20010;&#20855;&#26377;&#38745;&#24577;&#12289;&#32447;&#31243;&#23616;&#37096;&#25110;&#32773;&#33258;&#21160;&#23384;&#20648;&#26399;&#30340; const &#23436;&#25972;&#23545;&#35937;&#25152;&#21344;&#25454;&#30340;&#23384;&#20648;&#26159;&#26410;&#23450;&#20041;&#34892;&#20026;&#65292;&#22240;&#20026;&#36825;&#31181;&#23545;&#35937;&#21487;&#33021;&#34987;&#23384;&#20648;&#20110;&#21482;&#35835;&#20869;&#23384;&#20013;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> B <span class="br0">{</span>
B<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38750;&#24179;&#20961;</span>
~B<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38750;&#24179;&#20961;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">const</span> B b<span class="sy4">;</span> <span class="co1">// const &#38745;&#24577;&#23545;&#35937;</span>
<span class="kw4">void</span> h<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
b.~B<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// b &#30340;&#29983;&#23384;&#26399;&#32467;&#26463;</span>
new <span class="br0">(</span><span class="kw1">const_cast</span><span class="sy1">&lt;</span>B<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>b<span class="br0">)</span><span class="br0">)</span> <span class="kw4">const</span> B<span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;&#65306;&#35797;&#22270;&#37325;&#29992; const &#23545;&#35937;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#19968;&#26086;&#22312;&#26576;&#20010;&#23545;&#35937;&#25152;&#26366;&#21344;&#25454;&#30340;&#22320;&#22336;&#19978;&#21019;&#24314;&#20102;&#26032;&#30340;&#23545;&#35937;&#65292;&#25152;&#26377;&#21407;&#23545;&#35937;&#30340;&#25351;&#38024;&#12289;&#24341;&#29992;&#21450;&#21517;&#23383;&#37117;&#20250;&#33258;&#21160;&#20195;&#34920;&#26032;&#30340;&#23545;&#35937;&#65292;&#32780;&#19988;&#19968;&#26086;&#26032;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#24320;&#22987;&#65292;&#23427;&#20204;&#23601;&#21487;&#20197;&#29992;&#20110;&#25805;&#20316;&#36825;&#20010;&#26032;&#23545;&#35937;&#65292;&#20294;&#20165;&#24403;&#26032;&#23545;&#35937;&#21487;&#36879;&#26126;&#26367;&#25442;&#26087;&#23545;&#35937;&#25165;&#21487;&#20197;&#12290;</p>
<p>&#23545;&#35937; <code>y</code> <i>&#21487;&#36879;&#26126;&#26367;&#25442;</i>&#23545;&#35937; <code>x</code> &#65292;&#33509;&#65306;</p>
<ul>
<li><code>y</code> &#30340;&#23384;&#20648;&#20934;&#30830;&#22320;&#19982; <code>x</code> &#25152;&#21344;&#25454;&#30340;&#23384;&#20648;&#20301;&#32622;&#37325;&#21472;</li>
<li><code>y</code> &#19982; <code>x</code> &#25317;&#26377;&#30456;&#21516;&#31867;&#22411;&#65288;&#24573;&#30053;&#39030;&#23618; cv &#38480;&#23450;&#31526;&#65289;</li>
<li><code>x</code> &#19981;&#26159;&#23436;&#25972; const &#23545;&#35937;</li>
<li><code>x</code> &#19982; <code>y</code> &#22343;&#19981;&#26159;&#22522;&#31867;&#23376;&#23545;&#35937;<span class="t-rev-inl t-since-cxx20"><span>&#65292;&#25110;&#20197; <code>[[<a href="cpp-language-attributes-no_unique_address.html">no_unique_address</a>]]</code> &#22768;&#26126;&#30340;&#25104;&#21592;&#23376;&#23545;&#35937;</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span></li>
<li>&#35201;&#20040;</li>
</ul>
<dl>
<dd>
<ul>
<li><code>x</code> &#19982; <code>y</code> &#37117;&#26159;&#23436;&#25972;&#23545;&#35937;&#65292;&#25110;</li>
<li><code>x</code> &#19982; <code>y</code> &#20998;&#21035;&#20026;&#23545;&#35937; <code>ox</code> &#19982; <code>oy</code> &#30340;&#30452;&#25509;&#23376;&#23545;&#35937;&#65292;&#32780; <code>oy</code> &#21487;&#36879;&#26126;&#26367;&#25442; <code>ox</code>&#12290;</li>
</ul>
</dd>
</dl>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> C <span class="br0">{</span>
<span class="kw4">int</span> i<span class="sy4">;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">const</span> C<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span> <span class="kw4">const</span> C<span class="sy3">&amp;</span> <span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">const</span> C<span class="sy3">&amp;</span> C<span class="sy4">::</span><span class="me2">operator</span><span class="sy1">=</span><span class="br0">(</span> <span class="kw4">const</span> C<span class="sy3">&amp;</span> other<span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">if</span> <span class="br0">(</span> this <span class="sy3">!</span><span class="sy1">=</span> <span class="sy3">&amp;</span>other <span class="br0">)</span> <span class="br0">{</span>
this<span class="sy2">-</span><span class="sy1">&gt;</span>~C<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// *this &#30340;&#29983;&#23384;&#26399;&#32467;&#26463;</span>
new <span class="br0">(</span>this<span class="br0">)</span> C<span class="br0">(</span>other<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21019;&#24314;&#20102; C &#31867;&#22411;&#30340;&#26032;&#23545;&#35937;</span>
f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#23450;&#20041;&#26126;&#30830;&#30340;</span>
<span class="br0">}</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span>
<span class="br0">}</span>
C c1<span class="sy4">;</span>
C c2<span class="sy4">;</span>
c1 <span class="sy1">=</span> c2<span class="sy4">;</span> <span class="co1">// &#23450;&#20041;&#26126;&#30830;&#30340;</span>
c1.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#23450;&#20041;&#26126;&#30830;&#30340;&#65307;c1 &#20195;&#34920; C &#31867;&#22411;&#30340;&#19968;&#20010;&#26032;&#23545;&#35937;</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx17">
<td>
<p>&#22914;&#26524;&#26410;&#33021;&#28385;&#36275;&#20197;&#19978;&#25152;&#21015;&#20986;&#30340;&#21508;&#39033;&#26465;&#20214;&#30340;&#35805;&#65292;&#36824;&#21487;&#20197;&#36890;&#36807;&#37319;&#29992;&#25351;&#38024;&#20248;&#21270;&#23631;&#38556; <span class="t-lc"><a href="cpp-utility-launder.html">std::launder</a></span> &#26469;&#33719;&#24471;&#25351;&#21521;&#26032;&#23545;&#35937;&#30340;&#26377;&#25928;&#25351;&#38024;&#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> A <span class="br0">{</span>
<span class="kw1">virtual</span> <span class="kw4">int</span> transmogrify<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> B <span class="sy4">:</span> A <span class="br0">{</span>
<span class="kw4">int</span> transmogrify<span class="br0">(</span><span class="br0">)</span> override <span class="br0">{</span> <span class="sy4">::</span><span class="me2">new</span><span class="br0">(</span>this<span class="br0">)</span> A<span class="sy4">;</span> <span class="kw1">return</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">inline</span> <span class="kw4">int</span> A<span class="sy4">::</span><span class="me2">transmogrify</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="sy4">::</span><span class="me2">new</span><span class="br0">(</span>this<span class="br0">)</span> B<span class="sy4">;</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">void</span> test<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
A i<span class="sy4">;</span>
<span class="kw4">int</span> n <span class="sy1">=</span> i.<span class="me1">transmogrify</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// int m = i.transmogrify(); // &#26410;&#23450;&#20041;&#34892;&#20026;&#65306;&#26032;&#30340; A &#23545;&#35937;&#26159;&#22522;&#31867;&#23376;&#23545;&#35937;&#65292;&#32780;&#26087;&#30340;&#26159;&#23436;&#25972;&#23545;&#35937;</span>
<span class="kw4">int</span> m <span class="sy1">=</span> <a href="cpp-utility-launder.html"><span class="kw1122">std::<span class="me2">launder</span></span></a><span class="br0">(</span><span class="sy3">&amp;</span>i<span class="br0">)</span><span class="sy2">-</span><span class="sy1">&gt;</span>transmogrify<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
<a href="cpp-error-assert.html"><span class="kw774">assert</span></a><span class="br0">(</span>m <span class="sy2">+</span> n <span class="sy1">==</span> <span class="nu0">3</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></td>
</tr>
</table>
<p>&#30456;&#20284;&#22320;&#65292;&#24403;&#22312;&#31867;&#25104;&#21592;&#25110;&#25968;&#32452;&#20803;&#32032;&#30340;&#23384;&#20648;&#20013;&#21019;&#24314;&#23545;&#35937;&#26102;&#65292;&#21482;&#26377;&#28385;&#36275;&#22914;&#19979;&#26465;&#20214;&#65292;&#25152;&#21019;&#24314;&#30340;&#23545;&#35937;&#25165;&#26159;&#21253;&#21547;&#21407;&#23545;&#35937;&#30340;&#23545;&#35937;&#30340;&#23376;&#23545;&#35937;&#65288;&#25104;&#21592;&#25110;&#20803;&#32032;&#65289;&#65306;</p>
<ul>
<li>&#21253;&#21547;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#24050;&#32463;&#24320;&#22987;&#19988;&#23578;&#26410;&#32467;&#26463;</li>
<li>&#26032;&#23545;&#35937;&#30340;&#23384;&#20648;&#19982;&#21407;&#23545;&#35937;&#30340;&#23384;&#20648;&#20005;&#26684;&#37325;&#21512;</li>
<li>&#26032;&#23545;&#35937;&#21644;&#21407;&#23545;&#35937;&#65288;&#24573;&#30053; cv &#38480;&#23450;&#24615;&#65289;&#20855;&#26377;&#30456;&#21516;&#30340;&#31867;&#22411;&#12290;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx17">
<td>
<p>&#21542;&#21017;&#19981;&#20351;&#29992; <span class="t-lc"><a href="cpp-utility-launder.html">std::launder</a></span> &#23601;&#19981;&#33021;&#20197;&#21407;&#23545;&#35937;&#30340;&#21517;&#23383;&#35775;&#38382;&#26032;&#23545;&#35937;&#65306;</p>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#21512;&#36866;&#30340;&#31034;&#20363;</td>
</tr>
</table>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></td>
</tr>
</table>
<p>&#19968;&#31181;&#29305;&#27530;&#24773;&#20917;&#26159;&#65292;&#28385;&#36275;&#20197;&#19979;&#26465;&#20214;&#30340;&#24773;&#20917;&#19979;&#21487;&#20197;&#22312;&#21547;&#26377; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">char</span></span></span> <span class="t-rev-inl t-since-cxx17"><span>&#25110; <a href="cpp-types-byte.html"><tt>std::byte</tt></a></span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span> &#30340;&#25968;&#32452;&#20013;&#21019;&#24314;&#23545;&#35937;&#65288;&#36825;&#31181;&#24773;&#20917;&#19979;&#31216;&#36825;&#20010;&#25968;&#32452;&#20026;&#23545;&#35937;<i>&#25552;&#20379;&#23384;&#20648;</i>&#65289;&#65306;</p>
<ul>
<li>&#25968;&#32452;&#30340;&#29983;&#23384;&#26399;&#24050;&#32463;&#24320;&#22987;&#19988;&#23578;&#26410;&#32467;&#26463;</li>
<li>&#26032;&#23545;&#35937;&#30340;&#23384;&#20648;&#23436;&#20840;&#36866;&#20110;&#25968;&#32452;&#20043;&#20869;</li>
<li>&#19981;&#23384;&#22312;&#28385;&#36275;&#36825;&#20123;&#32422;&#26463;&#30340;&#65292;&#20869;&#23884;&#20110;&#35813;&#25968;&#32452;&#30340;&#25968;&#32452;&#23545;&#35937;&#12290;</li>
</ul>
<p>&#22914;&#26524;&#35813;&#25968;&#32452;&#30340;&#36825;&#20010;&#37096;&#20998;&#20043;&#21069;&#26366;&#20026;&#21478;&#19968;&#20010;&#23545;&#35937;&#25552;&#20379;&#23384;&#20648;&#65292;&#37027;&#20010;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#23601;&#20250;&#22240;&#20026;&#20854;&#23384;&#20648;&#34987;&#37325;&#29992;&#32780;&#32467;&#26463;&#65292;&#19981;&#36807;&#25968;&#32452;&#33258;&#36523;&#30340;&#29983;&#23384;&#26399;&#24182;&#26410;&#32467;&#26463;&#65288;&#20854;&#23384;&#20648;&#24182;&#19981;&#34987;&#24403;&#25104;&#26159;&#34987;&#37325;&#29992;&#20102;&#65289;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> ...<span class="me1">T</span><span class="sy1">&gt;</span>
<span class="kw1">struct</span> AlignedUnion <span class="br0">{</span>
alignas<span class="br0">(</span>T...<span class="br0">)</span> <span class="kw4">unsigned</span> <span class="kw4">char</span> data<span class="br0">[</span>maxv<span class="br0">(</span>sizeof<span class="br0">(</span>T<span class="br0">)</span>...<span class="br0">)</span><span class="br0">]</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
AlignedUnion<span class="sy1">&lt;</span><span class="kw4">int</span>, <span class="kw4">char</span><span class="sy1">&gt;</span> au<span class="sy4">;</span>
<span class="kw4">int</span> <span class="sy2">*</span>p <span class="sy1">=</span> new <span class="br0">(</span>au.<span class="me1">data</span><span class="br0">)</span> <span class="kw4">int</span><span class="sy4">;</span> <span class="co1">// OK &#65306; au.data &#25552;&#20379;&#23384;&#20648;</span>
<span class="kw4">char</span> <span class="sy2">*</span>c <span class="sy1">=</span> new <span class="br0">(</span>au.<span class="me1">data</span><span class="br0">)</span> <span class="kw4">char</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK &#65306; *p &#30340;&#29983;&#23384;&#26399;&#32467;&#26463;</span>
<span class="kw4">char</span> <span class="sy2">*</span>d <span class="sy1">=</span> new <span class="br0">(</span>au.<span class="me1">data</span> <span class="sy2">+</span> <span class="nu0">1</span><span class="br0">)</span> <span class="kw4">char</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">return</span> <span class="sy2">*</span>c <span class="sy2">+</span> <span class="sy2">*</span>d<span class="sy4">;</span> <span class="co1">// OK</span>
<span class="br0">}</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E5.9C.A8.E7.94.9F.E5.AD.98.E6.9C.9F.E4.B9.8B.E5.A4.96.E8.BF.9B.E8.A1.8C.E8.AE.BF.E9.97.AE">&#22312;&#29983;&#23384;&#26399;&#20043;&#22806;&#36827;&#34892;&#35775;&#38382;</span></h3>
<p>&#22312;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#24320;&#22987;&#20043;&#21069;&#20294;&#20854;&#23384;&#20648;&#23558;&#35201;&#21344;&#25454;&#30340;&#23384;&#20648;&#24050;&#32463;&#20998;&#37197;&#20043;&#21518;&#65292;&#25110;&#32773;&#22312;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#24050;&#32463;&#32467;&#26463;&#20043;&#21518;&#20294;&#20854;&#25152;&#26366;&#21344;&#25454;&#30340;&#23384;&#20648;&#34987;&#37325;&#29992;&#25110;&#37322;&#25918;&#20043;&#21069;&#65292;&#23545;&#20195;&#34920;&#36825;&#20010;&#23545;&#35937;&#30340;&#27867;&#24038;&#20540;&#34920;&#36798;&#24335;&#30340;&#20197;&#19979;&#36825;&#20123;&#29992;&#27861;&#26159;&#26410;&#23450;&#20041;&#30340;&#65306;</p>
<ol>
<li>&#24038;&#20540;&#21521;&#21491;&#20540;&#36716;&#25442;&#65288;&#27604;&#22914;&#23545;&#25509;&#21463;&#20854;&#20540;&#30340;&#20989;&#25968;&#36827;&#34892;&#35843;&#29992;&#65289;&#65292;&#38500;&#38750;&#27491;&#22312;&#26500;&#36896;&#25110;&#26512;&#26500;&#35813;&#23545;&#35937;&#65288;&#27492;&#26102;&#24212;&#29992;&#19981;&#21516;&#30340;&#35268;&#21017;&#38598;&#21512;&#65289;&#65306;</li>
<li>&#35775;&#38382;&#20854;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#25110;&#35843;&#29992;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#12290;</li>
<li>&#32465;&#23450;&#24341;&#29992;&#21040;&#20854;&#26576;&#20010;&#34394;&#22522;&#31867;&#23376;&#23545;&#35937;&#12290;</li>
<li><a href="cpp-language-dynamic_cast.html"><code>dynamic_cast</code></a> &#25110; <a href="cpp-language-typeid.html"><code>typeid</code></a> &#34920;&#36798;&#24335;&#12290;</li>
</ol>
<p>&#20197;&#19978;&#35268;&#21017;&#20063;&#36866;&#29992;&#20110;&#25351;&#38024;&#65288;&#32465;&#23450;&#24341;&#29992;&#21040;&#34394;&#22522;&#31867;&#25913;&#20026;&#38544;&#24335;&#36716;&#25442;&#20026;&#34394;&#22522;&#31867;&#30340;&#25351;&#38024;&#65289;&#65292;&#24182;&#26377;&#20004;&#26465;&#39069;&#22806;&#30340;&#35268;&#21017;&#65306;</p>
<ol>
<li>&#23545;&#25351;&#21521;&#27809;&#26377;&#23545;&#35937;&#30340;&#23384;&#20648;&#30340;&#25351;&#38024;&#36827;&#34892; <a href="cpp-language-static_cast.html"><code>static_cast</code></a> &#26102;&#21482;&#20801;&#35768;&#23558;&#20854;&#24378;&#21046;&#36716;&#25442;&#20026;&#65288;&#21487;&#33021; cv &#38480;&#23450;&#30340;&#65289;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span><span class="sy2">*</span></span></span>&#12290;</li>
<li>&#36716;&#22411;&#21040; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span><span class="sy2">*</span></span></span> &#30340;&#25351;&#21521;&#26080;&#23545;&#35937;&#23384;&#20648;&#30340;&#25351;&#38024;&#65292;&#21482;&#33021;&#34987; <a href="cpp-language-static_cast.html"><code>static_cast</code></a> &#21040;&#25351;&#21521;&#21487;&#33021; cv &#38480;&#23450;&#30340; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span> &#12289;&#25110;&#21487;&#33021; cv &#38480;&#23450;&#30340; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">char</span></span></span> <span class="t-rev-inl t-since-cxx17"><span>&#12289;&#25110;&#21487;&#33021; cv &#38480;&#23450;&#30340; <span class="t-lc">std::byte</span></span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span> &#30340;&#25351;&#38024;&#12290;</li>
</ol>
<p>&#22312;&#26500;&#36896;&#21644;&#26512;&#26500;&#30340;&#36807;&#31243;&#20013;&#65292;&#36890;&#24120;&#20801;&#35768;&#35843;&#29992;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#65292;&#35775;&#38382;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#65292;&#20197;&#21450;&#20351;&#29992; <a href="cpp-language-typeid.html"><code>typeid</code></a> &#21644; <a href="cpp-language-dynamic_cast.html"><code>dynamic_cast</code></a>&#12290;&#28982;&#32780;&#65292;&#22240;&#20026;&#29983;&#23384;&#26399;&#23578;&#26410;&#24320;&#22987;&#65288;&#22312;&#26500;&#36896;&#26399;&#38388;&#65289;&#25110;&#24050;&#32467;&#26463;&#65288;&#22312;&#26512;&#26500;&#26399;&#38388;&#65289;&#65292;&#21482;&#20801;&#35768;&#29305;&#23450;&#30340;&#25805;&#20316;&#12290;&#20854;&#20182;&#38480;&#21046;&#26465;&#20214;&#21442;&#35265;<a href="cpp-language-virtual.html#.E5.9C.A8.E6.9E.84.E9.80.A0.E4.B8.8E.E6.9E.90.E6.9E.84.E6.9C.9F.E9.97.B4">&#22312;&#26500;&#36896;&#21644;&#26512;&#26500;&#36807;&#31243;&#20013;&#35843;&#29992;&#34394;&#20989;&#25968;</a>&#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p><a rel="nofollow" class="external text" href="https://wg21.link/p1358r0#2256">&#26680;&#24515;&#38382;&#39064; 2256</a> &#35299;&#20915;&#21069;&#65292;&#38750;&#31867;&#23545;&#35937;&#65288;&#23384;&#20648;&#26399;&#30340;&#32456;&#27490;&#65289;&#21644;&#31867;&#23545;&#35937;&#65288;&#25353;&#26500;&#36896;&#39034;&#24207;&#30340;&#36870;&#24207;&#65289;&#30340;&#29983;&#23384;&#26399;&#32456;&#27490;&#35268;&#21017;&#23384;&#22312;&#24046;&#21035;&#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> A <span class="br0">{</span>
<span class="kw4">int</span><span class="sy2">*</span> p<span class="sy4">;</span>
~A<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="sy2">*</span>p<span class="sy4">;</span> <span class="br0">}</span> <span class="co1">// CWG2256 &#36215;&#20026;&#26410;&#23450;&#20041;&#34892;&#20026;&#65306; n &#19981;&#27963;&#21040; a &#30340;&#29983;&#23384;&#26399;&#20043;&#21518;</span>
<span class="co1">// CWG2256 &#21069;&#26377;&#24688;&#24403;&#23450;&#20041;&#65306;&#25171;&#21360; 123</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>
A a<span class="sy4">;</span>
<span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">123</span><span class="sy4">;</span> <span class="co1">// &#20551;&#22914; n &#19981;&#27963;&#21040; a &#30340;&#29983;&#23384;&#26399;&#20043;&#21518;&#65292;&#21017;&#33021;&#25226;&#36825;&#26465;&#35821;&#21477;&#20248;&#21270;&#25481;&#65288;&#27515;&#23384;&#20648;&#65289;</span>
a.<span class="me1">p</span> <span class="sy1">=</span> <span class="sy3">&amp;</span>n<span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p><a rel="nofollow" class="external text" href="https://wg21.link/p1971r0#RU007">RU007</a> &#35299;&#20915;&#21069;&#65292; const &#38480;&#23450;&#31867;&#22411;&#25110;&#24341;&#29992;&#31867;&#22411;&#30340;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#20351;&#21547;&#26377;&#23427;&#30340;&#23545;&#35937;&#26080;&#27861;&#20026;&#21487;&#36879;&#26126;&#26367;&#25442;&#65292;&#36825;&#20351;&#24471; <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span> &#19982; <span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> &#38590;&#20197;&#23454;&#29616;&#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="kw4">const</span> <span class="kw4">int</span> n<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">union</span> U <span class="br0">{</span> X x<span class="sy4">;</span> <span class="kw4">float</span> f<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> tong<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
U u <span class="sy1">=</span> <span class="br0">{</span> <span class="br0">{</span> <span class="nu0">1</span> <span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span>
u.<span class="me1">f</span> <span class="sy1">=</span> <span class="nu0">5</span>.<span class="me1">f</span><span class="sy4">;</span> <span class="co1">// OK &#65306;&#21019;&#24314; &#39;u&#39; &#30340;&#26032;&#23376;&#23545;&#35937;</span>
X <span class="sy2">*</span>p <span class="sy1">=</span> new <span class="br0">(</span><span class="sy3">&amp;</span>u.<span class="me1">x</span><span class="br0">)</span> X <span class="br0">{</span><span class="nu0">2</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK &#65306;&#21019;&#24314; &#39;u&#39; &#30340;&#26032;&#23376;&#23545;&#35937;</span>
<a href="cpp-error-assert.html"><span class="kw774">assert</span></a><span class="br0">(</span>p<span class="sy2">-</span><span class="sy1">&gt;</span>n <span class="sy1">==</span> <span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
<a href="cpp-error-assert.html"><span class="kw774">assert</span></a><span class="br0">(</span>u.<span class="me1">x</span>.<span class="me1">n</span> <span class="sy1">==</span> <span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// RU007 &#21069;&#26410;&#23450;&#20041;&#65306;</span>
<span class="co1">// &#39;u.x&#39; &#19981;&#25351;&#21517;&#26032;&#23376;&#23545;&#35937;</span>
<a href="cpp-error-assert.html"><span class="kw774">assert</span></a><span class="br0">(</span><span class="sy2">*</span><a href="cpp-utility-launder.html"><span class="kw1122">std::<span class="me2">launder</span></span></a><span class="br0">(</span><span class="sy3">&amp;</span>u.<span class="me1">x</span>.<span class="me1">n</span><span class="br0">)</span> <span class="sy1">==</span> <span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21363;&#20351;&#22312; RU007 &#21069;&#20063; OK</span>
<span class="br0">}</span></pre></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/issue201">CWG 201</a></td>
<td>C++98</td>
<td>&#35201;&#27714;&#40664;&#35748;&#26500;&#36896;&#20989;&#25968;&#30340;&#40664;&#35748;&#23454;&#21442;&#20013;&#30340;&#20020;&#26102;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#22312;&#25968;&#32452;&#21021;&#22987;&#21270;&#23436;&#25104;&#26102;&#32467;&#26463;</td>
<td>&#29983;&#23384;&#26399;&#22312;&#19979;&#20010;&#20803;&#32032;&#21021;&#22987;&#21270;&#20043;&#21069;&#32467;&#26463;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue2012">CWG 2012</a></td>
<td>C++98</td>
<td>&#24341;&#29992;&#30340;&#29983;&#23384;&#26399;&#34987;&#25351;&#23450;&#20026;&#19982;&#23384;&#20648;&#26399;&#21305;&#37197;&#65292;&#36825;&#35201;&#27714; extern &#24341;&#29992;&#22312;&#20854;&#21021;&#22987;&#21270;&#22120;&#36816;&#34892;&#21069;&#24050;&#23384;&#27963;</td>
<td>&#29983;&#23384;&#26399;&#22987;&#20110;&#21021;&#22987;&#21270;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue2107">CWG 2107</a></td>
<td>C++98</td>
<td>CWG 124 &#30340;&#35299;&#20915;&#26041;&#26696;&#26410;&#24212;&#29992;&#21040;&#22797;&#21046;&#26500;&#36896;&#20989;&#25968;</td>
<td>&#24050;&#24212;&#29992;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.link/P0137R1">P0137R1</a></td>
<td>C++98</td>
<td>&#22312; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">char</span></span></span> &#25968;&#32452;&#20013;&#21019;&#24314;&#23545;&#35937;&#37325;&#29992;&#20854;&#23384;&#20648;</td>
<td>&#20854;&#23384;&#20648;&#19981;&#34987;&#37325;&#29992;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue2256">CWG 2256</a></td>
<td>C++98</td>
<td>&#21487;&#24179;&#20961;&#26512;&#26500;&#23545;&#35937;&#30340;&#29983;&#23384;&#26399;&#19982;&#20854;&#20182;&#23545;&#35937;&#19981;&#19968;&#33268;</td>
<td>&#20351;&#20043;&#19968;&#33268;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.link/P1971R0">P1971R0</a></td>
<td>C++98</td>
<td>const &#38480;&#23450;&#31867;&#22411;&#25110;&#24341;&#29992;&#31867;&#22411;&#30340;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#20351;&#21253;&#21547;&#23427;&#30340;&#23545;&#35937;&#19981;&#33021;&#20026;&#21487;&#36879;&#26126;&#26367;&#25442;</td>
<td>&#31227;&#38500;&#38480;&#21046;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.link/P2103R0">P2103R0</a></td>
<td>C++98</td>
<td>&#21487;&#36879;&#26126;&#26367;&#25442;&#24615;&#19981;&#35201;&#27714;&#20445;&#25345;&#21407;&#32467;&#26500;</td>
<td>&#35201;&#27714;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.link/P0593R6">P0593R6</a></td>
<td>C++98</td>
<td>&#20266;&#26512;&#26500;&#20989;&#25968;&#35843;&#29992;&#26080;&#25928;&#26524;</td>
<td>&#23427;&#38144;&#27585;&#23545;&#35937;</td>
</tr>
<tr>
<td><a rel="nofollow" class="external text" href="https://wg21.cmeerw.net/cwg/issue2470">CWG 2470</a></td>
<td>C++98</td>
<td>&#21487;&#20197;&#26377;&#22810;&#20110;&#19968;&#20010;&#25968;&#32452;&#20026;&#21516;&#19968;&#23545;&#35937;&#25552;&#20379;&#23384;&#20648;</td>
<td>&#20165;&#19968;&#20010;&#25552;&#20379;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">&#24341;&#29992;</span></h3>
<div class="t-ref-std-c++20">
<ul>
<li>C++20 &#26631;&#20934;&#65288;ISO/IEC 14882:2020&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.7.3 Object lifetime [basic.life]</li>
</ul>
</dd>
</dl>
<dl>
<dd>
<ul>
<li>11.10.4 Construction and destruction [class.cdtor]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++17">
<ul>
<li>C++17 &#26631;&#20934;&#65288;ISO/IEC 14882:2017&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>6.8 Object lifetime [basic.life]</li>
</ul>
</dd>
</dl>
<dl>
<dd>
<ul>
<li>15.7 Construction and destruction [class.cdtor]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++14">
<ul>
<li>C++14 &#26631;&#20934;&#65288;ISO/IEC 14882:2014&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>3 Object lifetime [basic.life]</li>
</ul>
</dd>
</dl>
<dl>
<dd>
<ul>
<li>12.7 Construction and destruction [class.cdtor]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++11">
<ul>
<li>C++11 &#26631;&#20934;&#65288;ISO/IEC 14882:2011&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>3.8 Object lifetime [basic.life]</li>
</ul>
</dd>
</dl>
<dl>
<dd>
<ul>
<li>12.7 Construction and destruction [class.cdtor]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++03">
<ul>
<li>C++03 &#26631;&#20934;&#65288;ISO/IEC 14882:2003&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>3.8 Object lifetime [basic.life]</li>
</ul>
</dd>
</dl>
<dl>
<dd>
<ul>
<li>12.7 Construction and destruction [class.cdtor]</li>
</ul>
</dd>
</dl>
</div>
<div class="t-ref-std-c++98">
<ul>
<li>C++98 &#26631;&#20934;&#65288;ISO/IEC 14882:1998&#65289;&#65306;</li>
</ul>
<dl>
<dd>
<ul>
<li>3.8 Object lifetime [basic.life]</li>
</ul>
</dd>
</dl>
<dl>
<dd>
<ul>
<li>12.7 Construction and destruction [class.cdtor]</li>
</ul>
</dd>
</dl>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin"></table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>