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

266 lines
48 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>reinterpret_cast &#36716;&#25442;</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_reinterpret_cast skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">reinterpret_cast &#36716;&#25442;</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>&#36890;&#36807;&#37325;&#26032;&#35299;&#37322;&#24213;&#23618;&#20301;&#27169;&#24335;&#22312;&#31867;&#22411;&#38388;&#36716;&#25442;&#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>reinterpret_cast &lt;</b></code> <span class="t-spar">&#26032;&#31867;&#22411;</span> <code><b>&gt; (</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-spar">&#26032;&#31867;&#22411;</span> &#31867;&#22411;&#30340;&#20540;&#12290;</p>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span></span></span> &#19981;&#21516;&#65292;&#20294;&#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">const_cast</span></span></span> &#31867;&#20284;&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">reinterpret_cast</span></span></span> &#34920;&#36798;&#24335;&#19981;&#20250;&#32534;&#35793;&#25104;&#20219;&#20309; CPU &#25351;&#20196;&#65288;&#38500;&#38750;&#22312;&#25972;&#25968;&#21644;&#25351;&#38024;&#38388;&#36716;&#25442;&#65292;&#25110;&#22312;&#25351;&#38024;&#34920;&#31034;&#20381;&#36182;&#20854;&#31867;&#22411;&#30340;&#19981;&#26126;&#26550;&#26500;&#19978;&#65289;&#12290;&#23427;&#32431;&#31929;&#26159;&#19968;&#20010;&#32534;&#35793;&#26102;&#25351;&#20196;&#65292;&#25351;&#31034;&#32534;&#35793;&#22120;&#23558; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#35270;&#20026;&#22914;&#21516;&#20855;&#26377; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#31867;&#22411;&#19968;&#26679;&#22788;&#29702;&#12290;</p>
<p>&#21482;&#26377;&#19979;&#21015;&#36716;&#25442;&#22312;&#19981;&#21435;&#38500;<i>&#24120;&#37327;&#24615;</i>&#25110;<i>&#26131;&#21464;&#24615;</i>&#30340;&#22330;&#21512;&#25165;&#33021;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">reinterpret_cast</span></span></span> &#25191;&#34892;&#12290;</p>
<div class="t-li1"><span class="t-li">1)</span> &#25972;&#22411;&#12289;&#26522;&#20030;&#12289;&#25351;&#38024;&#25110;&#25104;&#21592;&#25351;&#38024;&#31867;&#22411;&#30340;&#34920;&#36798;&#24335;&#21487;&#36716;&#25442;&#21040;&#20854;&#33258;&#36523;&#30340;&#31867;&#22411;&#12290;&#20135;&#29983;&#30340;&#20540;&#19982; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;&#30456;&#21516;&#12290;<span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></div>
<div class="t-li1"><span class="t-li">2)</span> &#25351;&#38024;&#33021;&#36716;&#25442;&#25104;&#22823;&#23567;&#36275;&#20197;&#20445;&#26377;&#20854;&#31867;&#22411;&#25152;&#26377;&#20540;&#30340;&#20219;&#20309;&#25972;&#22411;&#31867;&#22411;&#65288;&#20363;&#22914;&#36716;&#25442;&#25104; <span class="t-lc"><a href="cpp-types-integer.html">std::uintptr_t</a></span>&#65289;</div>
<div class="t-li1"><span class="t-li">3)</span> &#20219;&#20309;&#25972;&#22411;&#25110;&#26522;&#20030;&#31867;&#22411;&#30340;&#20540;&#21487;&#36716;&#25442;&#21040;&#25351;&#38024;&#31867;&#22411;&#12290;&#25351;&#38024;&#36716;&#25442;&#21040;&#26377;&#36275;&#22815;&#22823;&#23567;&#30340;&#25972;&#25968;&#20877;&#36716;&#25442;&#22238;&#21516;&#19968;&#25351;&#38024;&#31867;&#22411;&#21518;&#65292;&#20445;&#35777;&#25317;&#26377;&#20854;&#21407;&#20540;&#65292;&#21542;&#21017;&#32467;&#26524;&#25351;&#38024;&#26080;&#27861;&#23433;&#20840;&#22320;&#35299;&#24341;&#29992;&#65288;&#19981;&#20445;&#35777;&#30456;&#21453;&#26041;&#21521;&#30340;&#24448;&#36820;&#36716;&#25442;&#65307;&#30456;&#21516;&#25351;&#38024;&#21487;&#25317;&#26377;&#22810;&#31181;&#25972;&#25968;&#34920;&#31034;&#65289;&#12290;&#19981;&#20445;&#35777;&#31354;&#25351;&#38024;&#24120;&#37327; <span class="t-lc"><a href="cpp-types-NULL.html">NULL</a></span> &#25110;&#25972;&#25968;&#38646;&#29983;&#25104;&#30446;&#26631;&#31867;&#22411;&#30340;&#31354;&#25351;&#38024;&#20540;&#65307;&#27492;&#26102;&#24212;&#35813;&#29992; <a href="cpp-language-static_cast.html">static_cast</a> &#25110;<a href="cpp-language-implicit_conversion.html">&#38544;&#24335;&#36716;&#25442;</a>&#12290;</div>
<div class="t-li1"><span class="t-li">4)</span> &#20219;&#20309; <span class="t-lc"><a href="cpp-types-nullptr_t.html">std::nullptr_t</a></span> &#31867;&#22411;&#30340;&#20540;&#65292;&#21253;&#21547; <span class="t-c"><span class="mw-geshi cpp source-cpp">nullptr</span></span>&#65292;&#21487;&#36716;&#25442;&#25104;&#20219;&#20309;&#25972;&#22411;&#31867;&#22411;&#65292;&#22914;&#21516;&#23427;&#26159; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span><span class="kw4">void</span><span class="sy2">*</span><span class="br0">)</span><span class="nu0">0</span></span></span> &#19968;&#26679;&#12290;&#20294;&#27809;&#26377;&#20540;&#33021;&#36716;&#25442;&#25104; <span class="t-lc"><a href="cpp-types-nullptr_t.html">std::nullptr_t</a></span>&#65292;&#29978;&#33267; <span class="t-c"><span class="mw-geshi cpp source-cpp">nullptr</span></span> &#20063;&#19981;&#34892;&#65306;&#27492;&#26102;&#24212;&#35813;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span></span></span>&#12290;<span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></div>
<div class="t-li1"><span class="t-li">5)</span> &#20219;&#20309;&#23545;&#35937;&#25351;&#38024;&#31867;&#22411; <code>T1*</code> &#21487;&#36716;&#25442;&#25104;&#25351;&#21521;&#23545;&#35937;&#25351;&#38024;&#31867;&#22411; <code><i>cv</i> T2*</code> &#12290;&#36825;&#20005;&#26684;&#31561;&#20215;&#20110; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span><span class="sy1">&lt;</span>cv T2<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="kw1">static_cast</span><span class="sy1">&lt;</span>cv <span class="kw4">void</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span>&#34920;&#36798;&#24335;<span class="br0">)</span><span class="br0">)</span></span></span>&#65288;&#36825;&#24847;&#21619;&#30528;&#65292;&#33509; <code>T2</code> &#30340;&#23545;&#40784;&#35201;&#27714;&#19981;&#27604; <code>T1</code> &#30340;&#26356;&#20005;&#26684;&#65292;&#21017;&#25351;&#38024;&#20540;&#19981;&#25913;&#21464;&#65292;&#19988;&#23558;&#32467;&#26524;&#25351;&#38024;&#36716;&#25442;&#22238;&#21407;&#31867;&#22411;&#23558;&#29983;&#25104;&#20854;&#21407;&#20540;&#65289;&#12290;&#20219;&#20309;&#24773;&#20917;&#19979;&#65292;&#21482;&#26377;<i>&#31867;&#22411;&#21035;&#21517;&#21270;&#65288;type aliasing&#65289;</i>&#35268;&#21017;&#20801;&#35768;&#65288;&#35265;&#19979;&#25991;&#65289;&#26102;&#65292;&#32467;&#26524;&#25351;&#38024;&#25165;&#21487;&#20197;&#23433;&#20840;&#22320;&#35299;&#24341;&#29992;&#12290;</div>
<div class="t-li1"><span class="t-li">6)</span> <code>T1</code> &#31867;&#22411;&#30340;&#24038;&#20540;&#34920;&#36798;&#24335;&#21487;&#36716;&#25442;&#25104;&#21040;&#21478;&#19968;&#20010;&#31867;&#22411; <code>T2</code> &#30340;&#24341;&#29992;&#12290;&#32467;&#26524;&#26159;&#19982;&#21407;&#24038;&#20540;&#25351;&#20195;&#21516;&#19968;&#23545;&#35937;&#65292;&#20294;&#26377;&#19981;&#21516;&#31867;&#22411;&#30340;&#24038;&#20540;&#25110;&#20129;&#20540;&#12290;&#19981;&#21019;&#24314;&#20020;&#26102;&#37327;&#65292;&#19981;&#36827;&#34892;&#22797;&#21046;&#65292;&#19981;&#35843;&#29992;&#26500;&#36896;&#20989;&#25968;&#25110;&#36716;&#25442;&#20989;&#25968;&#12290;&#21482;&#26377;<i>&#31867;&#22411;&#21035;&#21517;&#21270;&#65288;type aliasing&#65289;</i>&#35268;&#21017;&#20801;&#35768;&#65288;&#35265;&#19979;&#25991;&#65289;&#26102;&#65292;&#32467;&#26524;&#24341;&#29992;&#25165;&#21487;&#20197;&#23433;&#20840;&#35775;&#38382;&#12290;</div>
<div class="t-li1"><span class="t-li">7)</span> &#20219;&#20309;&#20989;&#25968;&#25351;&#38024;&#21487;&#36716;&#25442;&#25104;&#25351;&#21521;&#19981;&#21516;&#20989;&#25968;&#31867;&#22411;&#30340;&#25351;&#38024;&#12290;&#36890;&#36807;&#25351;&#21521;&#19981;&#21516;&#20989;&#25968;&#31867;&#22411;&#30340;&#25351;&#38024;&#35843;&#29992;&#20989;&#25968;&#26159;&#26410;&#23450;&#20041;&#30340;&#65292;&#20294;&#23558;&#36825;&#31181;&#25351;&#38024;&#36716;&#25442;&#22238;&#25351;&#21521;&#21407;&#20989;&#25968;&#31867;&#22411;&#30340;&#25351;&#38024;&#23558;&#29983;&#25104;&#25351;&#21521;&#21407;&#20989;&#25968;&#30340;&#25351;&#38024;&#20540;&#12290;</div>
<div class="t-li1"><span class="t-li">8)</span> &#19968;&#20123;&#23454;&#29616;&#19978;&#65288;&#29305;&#21035;&#26159;&#22312;&#20219;&#20309; POSIX &#20860;&#23481;&#30340;&#31995;&#32479;&#19978;&#65292;&#21363;&#22522;&#20110; <a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html">dlsym</a> &#30340;&#35201;&#27714;&#65289;&#65292;&#20989;&#25968;&#25351;&#38024;&#21487;&#20197;&#36716;&#25442;&#25104; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span><span class="sy2">*</span></span></span> &#25110;&#20219;&#20309;&#20854;&#20182;&#23545;&#35937;&#25351;&#38024;&#65292;&#21453;&#20043;&#20134;&#28982;&#12290;&#33509;&#23454;&#29616;&#25903;&#25345;&#21452;&#21521;&#30340;&#36716;&#25442;&#65292;&#21017;&#36716;&#25442;&#22238;&#21407;&#31867;&#22411;&#23558;&#29983;&#25104;&#21407;&#20540;&#65292;&#21542;&#21017;&#32467;&#26524;&#25351;&#38024;&#19981;&#33021;&#23433;&#20840;&#22320;&#35299;&#24341;&#29992;&#25110;&#35843;&#29992;&#12290;</div>
<div class="t-li1"><span class="t-li">9)</span> &#20219;&#20309;&#25351;&#38024;&#31867;&#22411;&#30340;&#31354;&#25351;&#38024;&#20540;&#21487;&#36716;&#25442;&#25104;&#20219;&#20309;&#20854;&#20182;&#25351;&#38024;&#31867;&#22411;&#65292;&#20135;&#29983;&#35813;&#31867;&#22411;&#30340;&#31354;&#25351;&#38024;&#20540;&#12290;&#27880;&#24847;&#19981;&#33021;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">reinterpret_cast</span></span></span> &#23558;&#31354;&#25351;&#38024;&#24120;&#37327; <span class="t-c"><span class="mw-geshi cpp source-cpp">nullptr</span></span> &#25110;&#20219;&#20309;&#20854;&#20182; <span class="t-lc"><a href="cpp-types-nullptr_t.html">std::nullptr_t</a></span> &#31867;&#22411;&#30340;&#20540;&#36716;&#25442;&#20026;&#25351;&#38024;&#65306;&#27492;&#26102;&#24212;&#35813;&#20351;&#29992;&#38544;&#24335;&#36716;&#25442;&#25110; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span></span></span>&#12290;</div>
<div class="t-li1"><span class="t-li">10)</span> &#25104;&#21592;&#20989;&#25968;&#25351;&#38024;&#21487;&#36716;&#25442;&#25104;&#25351;&#21521;&#19981;&#21516;&#31867;&#22411;&#30340;&#19981;&#21516;&#25104;&#21592;&#20989;&#25968;&#30340;&#25351;&#38024;&#12290;&#36716;&#25442;&#22238;&#21407;&#31867;&#22411;&#23558;&#29983;&#25104;&#21407;&#20540;&#65292;&#21542;&#21017;&#32467;&#26524;&#25351;&#38024;&#19981;&#33021;&#23433;&#20840;&#20351;&#29992;&#12290;</div>
<div class="t-li1"><span class="t-li">11)</span> &#25351;&#21521;&#26576;&#31867; <code>T1</code> &#30340;&#25104;&#21592;&#23545;&#35937;&#30340;&#25351;&#38024;&#21487;&#36716;&#25442;&#25104;&#25351;&#21521;&#21478;&#19968;&#20010;&#31867; <code>T2</code> &#30340;&#21478;&#19968;&#20010;&#25104;&#21592;&#23545;&#35937;&#30340;&#25351;&#38024;&#12290;&#33509; <code>T2</code> &#30340;&#23545;&#40784;&#19981;&#27604; <code>T1</code> &#26356;&#20005;&#26684;&#65292;&#21017;&#36716;&#25442;&#22238;&#21407;&#31867;&#22411; <code>T1</code> &#23558;&#29983;&#25104;&#21407;&#20540;&#65292;&#21542;&#21017;&#19981;&#33021;&#23433;&#20840;&#22320;&#20351;&#29992;&#32467;&#26524;&#25351;&#38024;&#12290;</div>
<p>&#21516;&#25152;&#26377;&#36716;&#22411;&#34920;&#36798;&#24335;&#65292;&#32467;&#26524;&#26159;&#65306;</p>
<ul>
<li>&#24038;&#20540;&#65292;&#22914;&#26524; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#24038;&#20540;&#24341;&#29992;&#25110;&#21040;&#20989;&#25968;&#31867;&#22411;&#30340;&#21491;&#20540;&#24341;&#29992;&#65307;</li>
<li>&#20129;&#20540;&#65292;&#22914;&#26524; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#21040;&#23545;&#35937;&#31867;&#22411;&#30340;&#21491;&#20540;&#24341;&#29992;&#65307;</li>
<li>&#21542;&#21017;&#20026;&#32431;&#21491;&#20540;&#12290;</li>
</ul>
<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-reinterpret_cast.html"><tt>reinterpret_cast</tt></a></p>
<h3><span class="mw-headline" id=".E7.B1.BB.E5.9E.8B.E5.88.AB.E5.90.8D.E5.8C.96">&#31867;&#22411;&#21035;&#21517;&#21270;</span></h3>
<p>&#22914;&#26524;&#19979;&#21015;&#26465;&#20214;&#22343;&#19981;&#28385;&#36275;&#65292;&#27599;&#24403;&#35797;&#22270;&#36890;&#36807; <code>&#21035;&#21517;&#31867;&#22411;</code> &#31867;&#22411;&#30340;&#27867;&#24038;&#20540;&#35835;&#25110;&#20462;&#25913;&#31867;&#22411;&#20026; <code>&#21160;&#24577;&#31867;&#22411;</code> &#30340;&#23545;&#35937;&#30340;&#20540;&#26102;&#65292;&#34892;&#20026;&#26410;&#23450;&#20041;&#65306;</p>
<ul>
<li><code>&#21035;&#21517;&#31867;&#22411;</code> &#19982; <code>&#21160;&#24577;&#31867;&#22411;</code> <i>&#30456;&#20284;</i>&#12290;</li>
<li><code>&#21035;&#21517;&#31867;&#22411;</code> &#26159; <code>&#21160;&#24577;&#31867;&#22411;</code> &#30340;&#65288;&#21487;&#26377; <a href="cpp-language-cv.html">cv</a> &#38480;&#23450;&#30340;&#65289;&#26377;&#31526;&#21495;&#25110;&#26080;&#31526;&#21495;&#21464;&#20307;&#12290;</li>
<li><code>&#21035;&#21517;&#31867;&#22411;</code> &#20026; <span class="t-rev-inl t-since-cxx17"><span><a href="cpp-types-byte.html"><tt>std::byte</tt></a>&#12289;</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span> &#25110; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">char</span></span></span>&#65306;&#36825;&#23481;&#35768;&#23558;&#20219;&#20309;&#23545;&#35937;&#30340;<a href="cpp-language-object.html#.E5.AF.B9.E8.B1.A1.E8.A1.A8.E7.A4.BA.E4.B8.8E.E5.80.BC.E8.A1.A8.E7.A4.BA">&#23545;&#35937;&#34920;&#31034;</a>&#20316;&#20026;&#19968;&#20010;&#23383;&#33410;&#25968;&#32452;&#21152;&#20197;&#26816;&#39564;&#12290;</li>
</ul>
<p>&#38750;&#27491;&#24335;&#22320;&#35828;&#65292;&#24573;&#30053;&#39030;&#23618; cv &#38480;&#23450;&#24615;&#65292;&#33509;&#20004;&#20010;&#31867;&#22411;&#31526;&#21512;&#19979;&#21015;&#26465;&#20214;&#65292;&#21017;&#23427;&#20204;<i>&#30456;&#20284;</i>&#65306;</p>
<ul>
<li>&#23427;&#20204;&#26159;&#21516;&#19968;&#31867;&#22411;&#65307;&#25110;</li>
<li>&#23427;&#20204;&#37117;&#26159;&#25351;&#38024;&#65292;&#19988;&#34987;&#25351;&#21521;&#30340;&#31867;&#22411;&#30456;&#20284;&#65307;&#25110;</li>
<li>&#23427;&#20204;&#37117;&#26159;&#25351;&#21521;&#30456;&#21516;&#31867;&#30340;&#25104;&#21592;&#25351;&#38024;&#65292;&#19988;&#34987;&#25351;&#21521;&#30340;&#25104;&#21592;&#31867;&#22411;&#30456;&#20284;&#65307;&#25110;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx20">
<td>
<ul>
<li>&#23427;&#20204;&#37117;&#26159;&#22823;&#23567;&#30456;&#21516;&#30340;&#25968;&#32452;&#25110;&#37117;&#26159;&#26410;&#30693;&#36793;&#30028;&#25968;&#32452;&#65292;&#19988;&#25968;&#32452;&#20803;&#32032;&#31867;&#22411;&#30456;&#20284;&#12290;</li>
</ul>
</td>
<td><span class="t-mark-rev t-until-cxx20">(C++20 &#21069;)</span></td>
</tr>
<tr class="t-rev t-since-cxx20">
<td>
<ul>
<li>&#23427;&#20204;&#37117;&#26159;&#25968;&#32452;&#65292;&#22823;&#23567;&#30456;&#21516;&#25110;&#33267;&#23569;&#19968;&#20010;&#26159;&#26410;&#30693;&#36793;&#30028;&#25968;&#32452;&#65292;&#19988;&#25968;&#32452;&#20803;&#32032;&#31867;&#22411;&#30456;&#20284;&#12290;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#20363;&#22914;&#65306;</p>
<ul>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">int</span> <span class="sy2">*</span> <span class="kw4">volatile</span> <span class="sy2">*</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="sy2">*</span> <span class="sy2">*</span> <span class="kw4">const</span></span></span> &#30456;&#20284;&#65307;</li>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span> <span class="kw4">volatile</span> S<span class="sy4">::</span><span class="sy2">*</span> <span class="kw4">const</span><span class="br0">)</span><span class="br0">[</span><span class="nu0">20</span><span class="br0">]</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span> <span class="kw4">const</span> S<span class="sy4">::</span><span class="sy2">*</span> <span class="kw4">volatile</span><span class="br0">)</span><span class="br0">[</span><span class="nu0">20</span><span class="br0">]</span></span></span> &#30456;&#20284;&#65307;</li>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span> <span class="kw4">const</span> <span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> <span class="sy2">*</span><span class="br0">)</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span> <span class="kw4">volatile</span> <span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> <span class="sy2">*</span><span class="br0">)</span></span></span> &#30456;&#20284;&#65307;</li>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span>S<span class="sy4">::</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span>S<span class="sy4">::</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span></span></span> <i>&#19981;</i>&#30456;&#20284;&#65307;</li>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> <span class="sy2">*</span><span class="br0">)</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">const</span> <span class="kw4">int</span> <span class="sy2">*</span><span class="br0">)</span></span></span> <i>&#19981;</i>&#30456;&#20284;&#65307;</li>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> <span class="sy2">*</span><span class="br0">)</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> <span class="sy2">*</span><span class="br0">)</span></span></span> <i>&#19981;</i>&#30456;&#20284;&#65307;</li>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> <span class="sy2">*</span> <span class="kw4">const</span><span class="br0">)</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span> <span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> <span class="sy2">*</span><span class="br0">)</span></span></span> &#30456;&#20284;&#65288;&#23427;&#20204;&#26159;&#21516;&#19968;&#31867;&#22411;&#65289;&#65307;</li>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-pair.html"><span class="kw1096">std::<span class="me2">pair</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span>, <span class="kw4">int</span><span class="sy1">&gt;</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-pair.html"><span class="kw1096">std::<span class="me2">pair</span></span></a><span class="sy1">&lt;</span><span class="kw4">const</span> <span class="kw4">int</span>, <span class="kw4">int</span><span class="sy1">&gt;</span></span></span> <i>&#19981;</i>&#30456;&#20284;&#12290;</li>
</ul>
<p>&#27492;&#35268;&#21017;&#20801;&#35768;&#36827;&#34892;&#22522;&#20110;&#31867;&#22411;&#30340;&#21035;&#21517;&#20998;&#26512;&#65292;&#21363;&#32534;&#35793;&#22120;&#20551;&#35774;&#36890;&#36807;&#19968;&#20010;&#31867;&#22411;&#30340;&#27867;&#24038;&#20540;&#35835;&#21462;&#30340;&#20540;&#65292;&#19981;&#20250;&#34987;&#36890;&#36807;&#19981;&#21516;&#31867;&#22411;&#30340;&#27867;&#24038;&#20540;&#30340;&#20889;&#20837;&#25152;&#20462;&#25913;&#65288;&#20381;&#25454;&#19978;&#36848;&#20363;&#22806;&#24773;&#20917;&#65289;&#12290;</p>
<p>&#27880;&#24847;&#65292;&#35768;&#22810; C++ &#32534;&#35793;&#22120;&#20316;&#20026;&#38750;&#26631;&#20934;&#35821;&#35328;&#25193;&#23637;&#25918;&#26494;&#27492;&#35268;&#21017;&#65292;&#20197;&#20801;&#35768;&#36890;&#36807; <a href="cpp-language-union.html">union</a> &#30340;&#19981;&#27963;&#36291;&#25104;&#21592;&#30340;&#36827;&#34892;&#31867;&#22411;&#38169;&#35823;&#30340;&#35775;&#38382;&#65288;&#36825;&#31181;&#35775;&#38382;&#22312; C &#20013;&#24182;&#19981;&#26159;&#26410;&#23450;&#20041;&#30340;&#65289;&#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>&#26631;&#20934;&#20013;&#23450;&#20041;&#20005;&#26684;&#21035;&#21517;&#21270;&#35268;&#21017;&#30340;&#27573;&#33853;&#21547;&#26377;&#20004;&#26465;&#39069;&#22806;&#26465;&#20363;&#65292;&#37096;&#20998;&#20174; C &#32487;&#25215;&#32780;&#26469;&#65306;</p>
<ul>
<li><code>&#21035;&#21517;&#31867;&#22411;</code> &#20026;<a href="cpp-language-aggregate_initialization.html">&#32858;&#21512;&#31867;&#22411;</a>&#25110; <a href="cpp-language-union.html">union</a> &#31867;&#22411;&#65292;&#23427;&#20445;&#26377;&#21069;&#36848;&#21508;&#31867;&#22411;&#20043;&#19968;&#20316;&#20026;&#20854;&#20803;&#32032;&#25110;&#38750;&#38745;&#24577;&#25104;&#21592;&#65288;&#36882;&#24402;&#22320;&#21253;&#21547;&#23376;&#32858;&#21512;&#20307;&#30340;&#20803;&#32032;&#21644;&#34987;&#21253;&#21547;&#30340;&#32852;&#21512;&#20307;&#30340;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#65289;&#12290;</li>
<li><code>&#21035;&#21517;&#31867;&#22411;</code> &#20026; <code>&#21160;&#24577;&#31867;&#22411;</code> &#30340;&#65288;&#21487;&#26377; <a href="cpp-language-cv.html">cv</a> &#38480;&#23450;&#30340;&#65289;<a href="cpp-language-derived_class.html">&#22522;&#31867;</a>&#12290;</li>
</ul>
<p>&#36825;&#20123;&#26465;&#20363;&#25152;&#25551;&#36848;&#30340;&#24773;&#20917;&#19981;&#21487;&#33021;&#20986;&#29616;&#20110; C++&#65292;&#20174;&#32780;&#20174;&#19978;&#38754;&#30340;&#35752;&#35770;&#20013;&#30465;&#30053;&#12290;&#22312; C &#20013;&#65292;&#32858;&#21512;&#22797;&#21046;&#21644;&#36171;&#20540;&#23558;&#32858;&#21512;&#20307;&#23545;&#35937;&#20316;&#20026;&#25972;&#20307;&#35775;&#38382;&#12290;&#20294; C++ &#20013;&#22987;&#32456;&#36890;&#36807;&#25104;&#21592;&#20989;&#25968;&#35843;&#29992;&#36827;&#34892;&#36825;&#31181;&#34892;&#21160;&#65292;&#36825;&#20250;&#35775;&#38382;&#21333;&#29420;&#30340;&#23376;&#23545;&#35937;&#32780;&#38750;&#25972;&#20010;&#23545;&#35937;&#65288;&#25110;&#22312;&#32852;&#21512;&#20307;&#30340;&#24773;&#20917;&#19979;&#65292;&#22797;&#21046;&#23545;&#35937;&#34920;&#31034;&#65292;&#21363;&#32463;&#30001; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">char</span></span></span>&#65289;&#12290;&#35265;<a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2051">&#26680;&#24515;&#38382;&#39064; 2051</a>&#12290;</p>
<p>&#20551;&#35774;&#31526;&#21512;&#23545;&#40784;&#35201;&#27714;&#65292;&#21017; <code>reinterpret_cast</code> &#22312;&#22788;&#29702;<a href="cpp-language-static_cast.html#.E6.8C.87.E9.92.88.E5.8F.AF.E4.BA.92.E8.BD.AC.E6.8D.A2"><i>&#25351;&#38024;&#21487;&#20114;&#36716;&#25442;</i></a>&#23545;&#35937;&#30340;&#23569;&#25968;&#21463;&#38480;&#24773;&#20917;&#22806;&#65292;&#19981;&#26356;&#25913;<a href="cpp-language-pointer.html#.E6.8C.87.E9.92.88">&#25351;&#38024;&#30340;&#20540;</a>&#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> S1 <span class="br0">{</span> <span class="kw4">int</span> a<span class="sy4">;</span> <span class="br0">}</span> s1<span class="sy4">;</span>
<span class="kw1">struct</span> S2 <span class="br0">{</span> <span class="kw4">int</span> a<span class="sy4">;</span> <span class="kw1">private</span><span class="sy4">:</span> <span class="kw4">int</span> b<span class="sy4">;</span> <span class="br0">}</span> s2<span class="sy4">;</span> <span class="co1">// &#38750;&#26631;&#20934;&#24067;&#23616;</span>
<span class="kw1">union</span> U <span class="br0">{</span> <span class="kw4">int</span> a<span class="sy4">;</span> <span class="kw4">double</span> b<span class="sy4">;</span> <span class="br0">}</span> u <span class="sy1">=</span> <span class="br0">{</span><span class="nu0">0</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> arr<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="sy4">;</span>
<span class="kw4">int</span><span class="sy2">*</span> p1 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>s1<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// p1 &#30340;&#20540;&#20026;&ldquo;&#25351;&#21521; s1.a &#30340;&#25351;&#38024;&rdquo;</span>
<span class="co1">// &#22240;&#20026; s1.a &#19982; s1 &#20026;&#25351;&#38024;&#21487;&#20114;&#36716;&#25442;</span>
<span class="kw4">int</span><span class="sy2">*</span> p2 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>s2<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// reinterpret_cast &#19981;&#26356;&#25913; p2 &#30340;&#20540;&#20026;&ldquo;&#25351;&#21521; s2 &#30340;&#25351;&#38024;&rdquo;&#12290; </span>
<span class="kw4">int</span><span class="sy2">*</span> p3 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>u<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// p3 &#30340;&#20540;&#20026;&ldquo;&#25351;&#21521; u.a &#30340;&#25351;&#38024;&rdquo;&#65306;u.a &#19982; u &#25351;&#38024;&#21487;&#20114;&#36716;&#25442;</span>
<span class="kw4">double</span><span class="sy2">*</span> p4 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span>p3<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// p4 &#30340;&#25351;&#38024;&#20026;&ldquo;&#25351;&#21521; u.b &#30340;&#25351;&#38024;&rdquo;&#65306;u.a &#19982; u.b</span>
<span class="co1">// &#25351;&#38024;&#21487;&#20114;&#36716;&#25442;&#65292;&#22240;&#20026;&#37117;&#19982; u &#25351;&#38024;&#21487;&#20114;&#36716;&#25442;</span>
<span class="kw4">int</span><span class="sy2">*</span> p5 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>arr<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// reinterpret_cast &#19981;&#26356;&#25913; p5 &#30340;&#20540;&#20026;&ldquo;&#25351;&#21521; arr &#30340;&#25351;&#38024;&rdquo;</span></pre></div>
</div>
<p>&#22312;&#19981;&#23454;&#38469;&#20195;&#34920;&#36866;&#24403;&#31867;&#22411;&#30340;&#23545;&#35937;&#30340;&#27867;&#24038;&#20540;&#65288;&#20363;&#22914;&#36890;&#36807; <code>reinterpret_cast</code> &#25152;&#33719;&#24471;&#65289;&#19978;&#65292;&#36827;&#34892;&#20195;&#34920;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#25110;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#30340;&#25104;&#21592;&#35775;&#38382;&#65292;&#23558;&#23548;&#33268;&#26410;&#23450;&#20041;&#34892;&#20026;&#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> S <span class="br0">{</span> <span class="kw4">int</span> x<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> T <span class="br0">{</span> <span class="kw4">int</span> x<span class="sy4">;</span> <span class="kw4">int</span> f<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> S1 <span class="sy4">:</span> S <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#26631;&#20934;&#24067;&#23616;</span>
<span class="kw1">struct</span> ST <span class="sy4">:</span> S, T <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#38750;&#26631;&#20934;&#24067;&#23616;</span>
S s <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">auto</span> p <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span>T<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>s<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// p &#30340;&#20540;&#20026;&ldquo;&#25351;&#21521; s &#30340;&#25351;&#38024;&rdquo;</span>
<span class="kw4">auto</span> i <span class="sy1">=</span> p<span class="sy2">-</span><span class="sy1">&gt;</span>x<span class="sy4">;</span> <span class="co1">// &#31867;&#25104;&#21592;&#35775;&#38382;&#34920;&#36798;&#24335;&#20026;&#26410;&#23450;&#20041;&#34892;&#20026;&#65306;s &#19981;&#26159; T &#23545;&#35937;</span>
p<span class="sy2">-</span><span class="sy1">&gt;</span>x <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
p<span class="sy2">-</span><span class="sy1">&gt;</span>f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
S1 s1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">auto</span> p1 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span>S<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>s1<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// p1 &#30340;&#20540;&#20026;&ldquo;&#25351;&#21521; S &#30340; s1 &#23376;&#23545;&#35937;&#30340;&#25351;&#38024;&rdquo;</span>
<span class="kw4">auto</span> i <span class="sy1">=</span> p1<span class="sy2">-</span><span class="sy1">&gt;</span>x<span class="sy4">;</span> <span class="co1">// OK</span>
p1<span class="sy2">-</span><span class="sy1">&gt;</span>x <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// OK</span>
ST st <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">auto</span> p2 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span>S<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>st<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// p2 &#30340;&#20540;&#20026;&ldquo;&#25351;&#21521; st &#30340;&#25351;&#38024;&rdquo;</span>
<span class="kw4">auto</span> i <span class="sy1">=</span> p2<span class="sy2">-</span><span class="sy1">&gt;</span>x<span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span>
p2<span class="sy2">-</span><span class="sy1">&gt;</span>x <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;</span></pre></div>
</div>
<p>&#35768;&#22810;&#32534;&#35793;&#22120;&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#21457;&#24067;&ldquo;&#20005;&#26684;&#21035;&#21517;&#21270;&rdquo;&#35686;&#21578;&#65292;&#21363;&#20351;&#22312;&#25216;&#26415;&#19978;&#36825;&#31181;&#26500;&#36896;&#25152;&#36829;&#32972;&#30340;&#24182;&#38750;&#31216;&#20026;&ldquo;&#20005;&#26684;&#21035;&#21517;&#21270;&#35268;&#21017;&rdquo;&#27573;&#33853;&#30340;&#35268;&#21017;&#12290;</p>
<p>&#20005;&#26684;&#21035;&#21517;&#21270;&#21450;&#20854;&#30456;&#20851;&#35268;&#21017;&#30340;&#30446;&#30340;&#65292;&#26159;&#21551;&#29992;&#22522;&#20110;&#31867;&#22411;&#30340;&#21035;&#21517;&#20998;&#26512;&#65292;&#33509;&#31243;&#24207;&#33021;&#21512;&#27861;&#22320;&#21019;&#24314;&#19968;&#31181;&#24773;&#24418;&#65292;&#20351;&#24471;&#20004;&#20010;&#25351;&#21521;&#26080;&#20851;&#31867;&#22411;&#30340;&#25351;&#38024;&#65288;&#20363;&#22914;&#19968;&#20010; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span><span class="sy2">*</span></span></span> &#21644;&#19968;&#20010; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">float</span><span class="sy2">*</span></span></span>&#65289;&#33021;&#21516;&#26102;&#23384;&#22312;&#24182;&#21487;&#19968;&#21516;&#29992;&#20110;&#21152;&#36733;&#25110;&#23384;&#20648;&#21516;&#19968;&#20869;&#23384;&#65288;&#35265;<a rel="nofollow" class="external text" href="http://www.open-std.org/pipermail/ub/2016-February/000565.html">&#27492; SG12 reflector &#19978;&#30340;&#37038;&#20214;</a>&#65289;&#65292;&#21017;&#21035;&#21517;&#20998;&#26512;&#20250;&#26222;&#36941;&#26080;&#25928;&#12290;&#25925;&#20219;&#20309;&#30475;&#36215;&#26469;&#33021;&#22815;&#21019;&#24314;&#36825;&#31181;&#24773;&#24418;&#30340;&#25216;&#24039;&#37117;&#24517;&#28982;&#23548;&#33268;&#26410;&#23450;&#20041;&#34892;&#20026;&#12290;</p>
<p>&#24403;&#38656;&#35201;&#23558;&#23545;&#35937;&#30340;&#23383;&#33410;&#35299;&#37322;&#20026;&#19981;&#21516;&#31867;&#22411;&#30340;&#20540;&#26102;&#65292;&#21487;&#20197;&#20351;&#29992; <span class="t-lc"><a href="cpp-string-byte-memcpy.html">std::memcpy</a></span> <span class="t-rev-inl t-since-cxx20"><span>&#25110; <a href="cpp-numeric-bit_cast.html"><tt>std::bit_cast</tt></a></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span>&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw4">double</span> d <span class="sy1">=</span> <span class="nu16">0.1</span><span class="sy4">;</span>
<a href="cpp-types-integer.html"><span class="kw109">std::<span class="me2">int64_t</span></span></a> n<span class="sy4">;</span>
static_assert<span class="br0">(</span>sizeof n <span class="sy1">==</span> sizeof d<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// n = *reinterpret_cast&lt;std::int64_t*&gt;(&amp;d); // &#26410;&#23450;&#20041;&#34892;&#20026;</span>
<a href="cpp-string-byte-memcpy.html"><span class="kw1159">std::<span class="me2">memcpy</span></span></a><span class="br0">(</span><span class="sy3">&amp;</span>n, <span class="sy3">&amp;</span>d, sizeof d<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
n <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">bit_cast</span><span class="sy1">&lt;</span><a href="cpp-types-integer.html"><span class="kw109">std::<span class="me2">int64_t</span></span></a><span class="sy1">&gt;</span><span class="br0">(</span>d<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20134; OK</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<p>&#33509;&#23454;&#29616;&#25552;&#20379; <span class="t-lc"><a href="cpp-types-integer.html">std::intptr_t</a></span> &#19982;/&#25110; <span class="t-lc"><a href="cpp-types-integer.html">std::uintptr_t</a></span>&#65292;&#21017;&#20174;&#25351;&#21521;&#23545;&#35937;&#31867;&#22411;&#25110; <i>cv</i> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span></span></span> &#30340;&#25351;&#38024;&#21040;&#36825;&#20123;&#31867;&#22411;&#30340;&#36716;&#22411;&#22987;&#32456;&#20026;&#33391;&#23450;&#20041;&#12290;&#28982;&#32780;&#36825;&#23545;&#20110;&#20989;&#25968;&#25351;&#38024;&#24182;&#19981;&#20445;&#35777;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<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/issue195">CWG 195</a></td>
<td>C++98</td>
<td>&#19981;&#20801;&#35768;&#20989;&#25968;&#25351;&#38024;&#21644;&#23545;&#35937;&#25351;&#38024;&#38388;&#30340;&#36716;&#25442;</td>
<td>&#25913;&#20026;&#26465;&#20214;&#24615;&#25903;&#25345;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<p>&#28436;&#31034; reinterpret_cast &#30340;&#19968;&#20123;&#29992;&#27861;&#65306;</p>
<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;cstdint&gt;</span>
<span class="co2">#include &lt;cassert&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">42</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">7</span><span class="sy4">;</span>
<span class="co1">// &#25351;&#38024;&#21040;&#25972;&#25968;&#24182;&#36716;&#22238;</span>
<a href="cpp-types-integer.html"><span class="kw133">std::<span class="me2">uintptr_t</span></span></a> v1 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><a href="cpp-types-integer.html"><span class="kw133">std::<span class="me2">uintptr_t</span></span></a><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>i<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#19981;&#33021;&#35823;&#29992; static_cast</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;&amp;i &#30340;&#20540;&#26159; 0x&quot;</span> <span class="sy1">&lt;&lt;</span> <a href="cpp-io-manip-hex.html"><span class="kw1782">std::<span class="me2">hex</span></span></a> <span class="sy1">&lt;&lt;</span> v1 <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
<span class="kw4">int</span><span class="sy2">*</span> p1 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span>v1<span class="br0">)</span><span class="sy4">;</span>
<a href="cpp-error-assert.html"><span class="kw774">assert</span></a><span class="br0">(</span>p1 <span class="sy1">==</span> <span class="sy3">&amp;</span>i<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#21040;&#21478;&#19968;&#20989;&#25968;&#25351;&#38024;&#24182;&#36716;&#22238;</span>
<span class="kw4">void</span><span class="br0">(</span><span class="sy2">*</span>fp1<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">void</span><span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="sy1">&gt;</span><span class="br0">(</span>f<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// fp1(); &#26410;&#23450;&#20041;&#34892;&#20026;</span>
<span class="kw4">int</span><span class="br0">(</span><span class="sy2">*</span>fp2<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">int</span><span class="br0">(</span><span class="sy2">*</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="sy1">&gt;</span><span class="br0">(</span>fp1<span class="br0">)</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> <a href="cpp-io-manip-hex.html"><span class="kw1781">std::<span class="me2">dec</span></span></a> <span class="sy1">&lt;&lt;</span> fp2<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="co1">// &#23433;&#20840;</span>
<span class="co1">// &#36890;&#36807;&#25351;&#38024;&#30340;&#31867;&#22411;&#21035;&#21517;&#21270;</span>
<span class="kw4">char</span><span class="sy2">*</span> p2 <span class="sy1">=</span> <span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy3">&amp;</span>i<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">if</span><span class="br0">(</span>p2<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy1">==</span> <span class="st0">&#39;\x7&#39;</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;&#26412;&#31995;&#32479;&#26159;&#23567;&#31471;&#30340;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="kw1">else</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;&#26412;&#31995;&#32479;&#26159;&#22823;&#31471;&#30340;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="co1">// &#36890;&#36807;&#24341;&#29992;&#30340;&#31867;&#22411;&#21035;&#21517;&#21270;</span>
<span class="kw1">reinterpret_cast</span><span class="sy1">&lt;</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span>i<span class="br0">)</span> <span class="sy1">=</span> <span class="nu0">42</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> i <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><span class="br0">[</span>maybe_unused<span class="br0">]</span><span class="br0">]</span> <span class="kw4">const</span> <span class="kw4">int</span> <span class="sy3">&amp;</span>const_iref <span class="sy1">=</span> i<span class="sy4">;</span>
<span class="co1">// int &amp;iref = reinterpret_cast&lt;int&amp;&gt;(const_iref); // &#32534;&#35793;&#38169;&#35823;&mdash;&mdash;&#19981;&#33021;&#21435;&#38500; const</span>
<span class="co1">// &#24517;&#39035;&#29992; const_cast &#20195;&#26367;&#65306;int &amp;iref = const_cast&lt;int&amp;&gt;(const_iref);</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#21487;&#33021;&#30340;&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">&amp;i &#30340;&#20540;&#26159; 0x7fff352c3580
42
&#26412;&#31995;&#32479;&#26159;&#23567;&#31471;&#30340;
42</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-const_cast.html">const_cast &#36716;&#25442;</a></td>
<td>&#28155;&#21152;&#25110;&#31227;&#38500; const</td>
</tr>
<tr class="t-dsc">
<td><a href="cpp-language-static_cast.html">static_cast &#36716;&#25442;</a></td>
<td>&#36827;&#34892;&#22522;&#26412;&#36716;&#25442;</td>
</tr>
<tr class="t-dsc">
<td><a href="cpp-language-dynamic_cast.html">dynamic_cast &#36716;&#25442;</a></td>
<td>&#36827;&#34892;&#26377;&#26816;&#26597;&#30340;&#22810;&#24577;&#36716;&#25442;</td>
</tr>
<tr class="t-dsc">
<td><a href="cpp-language-explicit_cast.html">&#26174;&#24335;&#36716;&#22411;</a></td>
<td>&#22312;&#31867;&#22411;&#38388;&#33258;&#30001;&#36716;&#25442;</td>
</tr>
<tr class="t-dsc">
<td><a href="cpp-language-implicit_conversion.html">&#26631;&#20934;&#36716;&#25442;</a></td>
<td>&#20174;&#19968;&#20010;&#31867;&#22411;&#21040;&#21478;&#19968;&#31867;&#22411;&#30340;&#38544;&#24335;&#36716;&#25442;</td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>