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

664 lines
98 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>&#36816;&#31639;&#31526;&#37325;&#36733;</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_operators skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#36816;&#31639;&#31526;&#37325;&#36733;</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>&#20026;&#29992;&#25143;&#23450;&#20041;&#31867;&#22411;&#30340;&#25805;&#20316;&#25968;&#23450;&#21046; C++ &#36816;&#31639;&#31526;&#12290;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<p>&#37325;&#36733;&#30340;&#36816;&#31639;&#31526;&#26159;&#20855;&#26377;&#29305;&#27530;&#30340;&#20989;&#25968;&#21517;&#30340;<a href="cpp-language-functions.html">&#20989;&#25968;</a>&#65306;</p>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>operator</b></code> <span class="t-spar">&#36816;&#31639;&#31526;</span></td>
<td>(1)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>operator</b></code> <span class="t-spar">&#31867;&#22411;</span></td>
<td>(2)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>operator</b></code> <code><b>new</b></code><br />
<code><b>operator</b></code> <code><b>new []</b></code></td>
<td>(3)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>operator</b></code> <code><b>delete</b></code><br />
<code><b>operator</b></code> <code><b>delete []</b></code></td>
<td>(4)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>operator</b></code> <code><b>&quot;&quot;</b></code> <span class="t-spar">&#21518;&#32512;&#26631;&#35782;&#31526;</span></td>
<td>(5)</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>operator</b></code> <code><b>co_await</b></code></td>
<td>(6)</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#36816;&#31639;&#31526;</span></td>
<td>-</td>
<td>&#19979;&#21015;&#36816;&#31639;&#31526;&#20043;&#19968;&#65306; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">+</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">-</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">/</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">%</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">^</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">&amp;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">|</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp">~</span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&gt;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">+</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">-</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">/</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">%</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">^</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">&amp;</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">|</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;&lt;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&gt;&gt;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&gt;&gt;=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;&lt;=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span><span class="sy1">=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;=</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&gt;=</span></span></span> <span class="t-rev-inl t-since-cxx20"><span><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;=&gt;</span></span></span></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">&amp;&amp;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">||</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">++</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">--</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp">,</span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">-</span><span class="sy1">&gt;</span><span class="sy2">*</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">-</span><span class="sy1">&gt;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span> <span class="br0">)</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">[</span> <span class="br0">]</span></span></span></td>
</tr>
</table>
<div class="t-li1"><span class="t-li">1)</span> &#37325;&#36733;&#30340;&#36816;&#31639;&#31526;&#65307;</div>
<div class="t-li1"><span class="t-li">2)</span> <a href="cpp-language-cast_operator.html">&#29992;&#25143;&#23450;&#20041;&#30340;&#36716;&#25442;&#20989;&#25968;</a>&#65307;</div>
<div class="t-li1"><span class="t-li">3)</span> <a href="cpp-memory-new-operator_new.html">&#20998;&#37197;&#20989;&#25968;</a>&#65307;</div>
<div class="t-li1"><span class="t-li">4)</span> <a href="cpp-memory-new-operator_delete.html">&#35299;&#20998;&#37197;&#20989;&#25968;</a>&#65307;</div>
<div class="t-li1"><span class="t-li">5)</span> <a href="cpp-language-user_literal.html">&#29992;&#25143;&#23450;&#20041;&#23383;&#38754;&#37327;</a>&#65307;</div>
<div class="t-li1"><span class="t-li">6)</span> &#29992;&#20110; <a href="cpp-language-coroutines.html#co_await">co_await &#34920;&#36798;&#24335;</a>&#30340;&#37325;&#36733;&#30340; <code>co_await</code> &#36816;&#31639;&#31526;&#12290;</div>
<h3><span class="mw-headline" id=".E9.87.8D.E8.BD.BD.E7.9A.84.E8.BF.90.E7.AE.97.E7.AC.A6">&#37325;&#36733;&#30340;&#36816;&#31639;&#31526;</span></h3>
<p>&#24403;<a href="cpp-language-expressions.html">&#34920;&#36798;&#24335;</a>&#20013;&#20986;&#29616;&#26576;&#20010;&#36816;&#31639;&#31526;&#65292;&#19988;&#23427;&#33267;&#23569;&#26377;-&#19968;&#20010;&#25805;&#20316;&#25968;&#25317;&#26377;<a href="cpp-language-class.html">&#31867;&#31867;&#22411;</a>&#25110;<a href="cpp-language-enum.html">&#26522;&#20030;&#31867;&#22411;</a>&#26102;&#65292;&#20351;&#29992;<a href="cpp-language-overload_resolution.html">&#37325;&#36733;&#20915;&#35758;</a>&#22312;&#20855;&#26377;&#19982;&#20197;&#19979;&#21508;&#39033;&#21305;&#37197;&#30340;&#31614;&#21517;&#30340;&#20989;&#25968;&#20013;&#65292;&#30830;&#23450;&#25152;&#35201;&#35843;&#29992;&#30340;&#29992;&#25143;&#23450;&#20041;&#20989;&#25968;&#65306;</p>
<table class="wikitable" style="font-size:85%; text-align:left;">
<tr>
<th>&#34920;&#36798;&#24335;</th>
<th>&#20316;&#20026;&#25104;&#21592;&#20989;&#25968;</th>
<th>&#20316;&#20026;&#38750;&#25104;&#21592;&#20989;&#25968;</th>
<th>&#31034;&#20363;</th>
</tr>
<tr>
<td>@a</td>
<td>(a).operator@ ( )</td>
<td>operator@ (a)</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span><a href="cpp-io-cin.html"><span class="kw1756">std::<span class="me2">cin</span></span></a></span></span> &#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-cin.html"><span class="kw1756">std::<span class="me2">cin</span></span></a>.<span class="me1">operator</span><span class="sy3">!</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
</tr>
<tr>
<td>a@b</td>
<td>(a).operator@ (b)</td>
<td>operator@ (a, b)</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><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="nu0">42</span></span></span> &#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>.<span class="me1">operator</span><span class="sy1">&lt;&lt;</span><span class="br0">(</span><span class="nu0">42</span><span class="br0">)</span></span></span></td>
</tr>
<tr>
<td>a=b</td>
<td>(a).operator= (b)</td>
<td style="background:#ff9090; color:black; vertical-align: middle; text-align: center;" class="table-no">&#19981;&#33021;&#26159;&#38750;&#25104;&#21592;</td>
<td>&#32473;&#23450; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> s<span class="sy4">;</span></span></span> &#65292; <span class="t-c"><span class="mw-geshi cpp source-cpp">s <span class="sy1">=</span> <span class="st0">&quot;abc&quot;</span><span class="sy4">;</span></span></span> &#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp">s.<span class="me1">operator</span><span class="sy1">=</span><span class="br0">(</span><span class="st0">&quot;abc&quot;</span><span class="br0">)</span></span></span></td>
</tr>
<tr>
<td>a(b...)</td>
<td>(a).operator()(b...)</td>
<td style="background:#ff9090; color:black; vertical-align: middle; text-align: center;" class="table-no">&#19981;&#33021;&#26159;&#38750;&#25104;&#21592;</td>
<td>&#32473;&#23450; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-numeric-random-random_device.html"><span class="kw1486">std::<span class="me2">random_device</span></span></a> r<span class="sy4">;</span></span></span> &#65292; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">auto</span> n <span class="sy1">=</span> r<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></span></span> &#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp">r.<span class="me1">operator</span><span class="br0">(</span><span class="br0">)</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
</tr>
<tr>
<td>a[b]</td>
<td>(a).operator[](b)</td>
<td style="background:#ff9090; color:black; vertical-align: middle; text-align: center;" class="table-no">&#19981;&#33021;&#26159;&#38750;&#25104;&#21592;</td>
<td>&#32473;&#23450; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-container-map.html"><span class="kw1281">std::<span class="me2">map</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span>, <span class="kw4">int</span><span class="sy1">&gt;</span> m<span class="sy4">;</span></span></span> &#65292; <span class="t-c"><span class="mw-geshi cpp source-cpp">m<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span> <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span></span></span> &#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp">m.<span class="me1">operator</span><span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span></span></span></td>
</tr>
<tr>
<td>a-&gt;</td>
<td>(a).operator-&gt; ( )</td>
<td style="background:#ff9090; color:black; vertical-align: middle; text-align: center;" class="table-no">&#19981;&#33021;&#26159;&#38750;&#25104;&#21592;</td>
<td>&#32473;&#23450; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">auto</span> p <span class="sy1">=</span> <a href="cpp-memory-unique_ptr-make_unique.html"><span class="kw735">std::<span class="me2">make_unique</span></span></a><span class="sy1">&lt;</span>S<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></span></span> <span class="t-c"><span class="mw-geshi cpp source-cpp">p<span class="sy2">-</span><span class="sy1">&gt;</span>bar<span class="br0">(</span><span class="br0">)</span></span></span> &#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp">p.<span class="me1">operator</span><span class="sy2">-</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
</tr>
<tr>
<td>a@</td>
<td>(a).operator@ (0)</td>
<td>operator@ (a, 0)</td>
<td>&#32473;&#23450; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">iterator</span> i <span class="sy1">=</span> v.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></span></span> &#65292; <span class="t-c"><span class="mw-geshi cpp source-cpp">i<span class="sy2">++</span></span></span> &#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp">i.<span class="me1">operator</span><span class="sy2">++</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span></span></span></td>
</tr>
<tr>
<td colspan="4">
<p>&#22312;&#36825;&#24352;&#34920;&#20013;&#65292;<code><b>@</b></code> &#26159;&#34920;&#31034;&#25152;&#26377;&#21305;&#37197;&#36816;&#31639;&#31526;&#30340;&#21344;&#20301;&#31526;&#65306;@a &#26159;&#25152;&#26377;&#21069;&#32512;&#36816;&#31639;&#31526;&#65292;a@ &#26159;&#38500; -&gt; &#20197;&#22806;&#30340;&#25152;&#26377;&#21518;&#32512;&#36816;&#31639;&#31526;&#65292;a@b &#26159;&#38500; = &#20197;&#22806;&#30340;&#25152;&#26377;&#20854;&#20182;&#36816;&#31639;&#31526;&#12290;</p>
</td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<p>&#21478;&#22806;&#65292;&#23545;&#20110;&#27604;&#36739;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span>, <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span><span class="sy1">=</span></span></span>, <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span></span></span>, <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&gt;</span></span></span>, <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;=</span></span></span>, <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&gt;=</span></span></span>, <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;=&gt;</span></span></span> &#65292;&#37325;&#36733;&#20915;&#35758;&#20063;&#20250;&#32771;&#34385;&#20174; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">==</span></span></span> &#25110; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;=&gt;</span></span></span> &#29983;&#25104;&#30340;<i>&#37325;&#20889;&#20505;&#36873;</i>&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#27880;&#24847;&#65306;&#23545;&#20110;&#37325;&#36733;&#30340; <span class="t-rev-inl t-since-cxx20"><span><a href="cpp-language-coroutines.html#co_await"><code>co_await</code></a> &#12289;</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span><a href="cpp-language-cast_operator.html">&#29992;&#25143;&#23450;&#20041;&#36716;&#25442;&#20989;&#25968;</a>&#12289;<a href="cpp-language-user_literal.html">&#29992;&#25143;&#23450;&#20041;&#23383;&#38754;&#37327;</a>&#12289;<a href="cpp-memory-new-operator_new.html">&#20998;&#37197;</a>&#19982;<a href="cpp-memory-new-operator_delete.html">&#35299;&#20998;&#37197;</a>&#65292;&#21487;&#20998;&#21035;&#35265;&#20854;&#19987;&#39064;&#12290;</p>
<p>&#37325;&#36733;&#30340;&#36816;&#31639;&#31526;&#65288;&#20294;&#38750;&#20869;&#24314;&#36816;&#31639;&#31526;&#65289;&#21487;&#29992;&#20989;&#25968;&#35760;&#27861;&#36827;&#34892;&#35843;&#29992;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> str <span class="sy1">=</span> <span class="st0">&quot;Hello, &quot;</span><span class="sy4">;</span>
str.<span class="me1">operator</span><span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span><span class="st0">&quot;world&quot;</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21516; str += &quot;world&quot;;</span>
operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span>operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a>, str<span class="br0">)</span> , <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21516; std::cout &lt;&lt; str &lt;&lt; &#39;\n&#39;;</span>
<span class="co1">// (C++17 &#36215;) &#20294;&#23450;&#24207;&#19981;&#21516;</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E9.99.90.E5.88.B6">&#38480;&#21046;</span></h3>
<ul>
<li>&#19981;&#33021;&#37325;&#36733;&#36816;&#31639;&#31526; <code><b>::</b></code>&#65288;&#20316;&#29992;&#22495;&#35299;&#26512;&#65289;&#12289;<code><b>.</b></code>&#65288;&#25104;&#21592;&#35775;&#38382;&#65289;&#12289;<code><b>.*</b></code>&#65288;&#36890;&#36807;&#25104;&#21592;&#25351;&#38024;&#30340;&#25104;&#21592;&#35775;&#38382;&#65289;&#21450; <code><b>?:</b></code>&#65288;&#19977;&#20803;&#26465;&#20214;&#65289;&#12290;</li>
<li>&#19981;&#33021;&#21019;&#24314;&#26032;&#36816;&#31639;&#31526;&#65292;&#20363;&#22914; <code><b>**</b></code>&#12289;<code><b>&lt;&gt;</b></code> &#25110; <code><b>&amp;|</b></code>&#12290;</li>
<li>&#19981;&#21487;&#33021;&#26356;&#25913;&#36816;&#31639;&#31526;&#30340;&#20248;&#20808;&#32423;&#12289;&#32467;&#21512;&#26041;&#21521;&#25110;&#25805;&#20316;&#25968;&#30340;&#25968;&#37327;&#12290;</li>
<li>&#37325;&#36733;&#30340;&#36816;&#31639;&#31526; <code><b>-&gt;</b></code> &#24517;&#39035;&#35201;&#20040;&#36820;&#22238;&#35064;&#25351;&#38024;&#65292;&#35201;&#20040;&#65288;&#25353;&#24341;&#29992;&#25110;&#20540;&#65289;&#36820;&#22238;&#21516;&#26679;&#37325;&#36733;&#20102;&#36816;&#31639;&#31526; <code><b>-&gt;</b></code> &#30340;&#23545;&#35937;&#12290;</li>
<li>&#36816;&#31639;&#31526; <code><b>&amp;&amp;</b></code> &#19982; <code><b>||</b></code> &#30340;&#37325;&#36733;&#22833;&#21435;&#30701;&#36335;&#27714;&#20540;&#12290;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx17">
<td>
<ul>
<li><code><b>&amp;&amp;</b></code>&#12289;<code><b>||</b></code> &#21644; <code><b>,</b></code>&#65288;&#36887;&#21495;&#65289;&#22312;&#34987;&#37325;&#36733;&#26102;&#22833;&#21435;&#20854;&#29305;&#27530;&#30340;<a href="cpp-language-eval_order.html">&#23450;&#24207;&#24615;&#36136;</a>&#65292;&#24182;&#19988;&#21363;&#20351;&#19981;&#20351;&#29992;&#20989;&#25968;&#35843;&#29992;&#35760;&#27861;&#65292;&#20063;&#34920;&#29616;&#20026;&#19982;&#24120;&#35268;&#30340;&#20989;&#25968;&#35843;&#29992;&#30456;&#20284;&#12290;</li>
</ul>
</td>
<td><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.A7.84.E8.8C.83.E5.AE.9E.E7.8E.B0">&#35268;&#33539;&#23454;&#29616;</span></h3>
<p>&#38500;&#20102;&#19978;&#36848;&#38480;&#21046;&#22806;&#65292;&#35821;&#35328;&#23545;&#37325;&#36733;&#36816;&#31639;&#31526;&#30340;&#25152;&#20316;&#25152;&#20026;&#25110;&#36820;&#22238;&#31867;&#22411;&#65288;&#23427;&#19981;&#21442;&#19982;&#37325;&#36733;&#20915;&#35758;&#65289;&#19978;&#27809;&#26377;&#20854;&#20182;&#20219;&#20309;&#21046;&#32422;&#65292;&#20294;&#36890;&#24120;&#26399;&#24453;&#37325;&#36733;&#30340;&#36816;&#31639;&#31526;&#34920;&#29616;&#23613;&#21487;&#33021;&#19982;&#20869;&#24314;&#36816;&#31639;&#31526;&#30456;&#20284;&#65306;&#26399;&#24453; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy2">+</span></span></span> &#23545;&#20854;&#23454;&#21442;&#36827;&#34892;&#30456;&#21152;&#32780;&#38750;&#30456;&#20056;&#65292;&#26399;&#24453; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">=</span></span></span> &#36827;&#34892;&#36171;&#20540;&#65292;&#22914;&#27492;&#31561;&#31561;&#12290;&#26399;&#24453;&#30456;&#20851;&#30340;&#36816;&#31639;&#31526;&#20043;&#38388;&#30340;&#34920;&#29616;&#20063;&#30456;&#20284;&#65288;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy2">+</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy2">+</span><span class="sy1">=</span></span></span> &#20570;&#21516;&#19968;&#31867;&#21152;&#27861;&#36816;&#31639;&#65289;&#12290;&#36820;&#22238;&#31867;&#22411;&#34987;&#26399;&#24453;&#20351;&#29992;&#35813;&#36816;&#31639;&#31526;&#30340;&#34920;&#36798;&#24335;&#38480;&#21046;&#65306;&#20363;&#22914;&#65292;&#20196;&#36171;&#20540;&#36816;&#31639;&#31526;&#25353;&#24341;&#29992;&#36820;&#22238;&#65292;&#20197;&#20351;&#20889;&#20986; <span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy1">=</span> b <span class="sy1">=</span> c <span class="sy1">=</span> d</span></span> &#21487;&#34892;&#65292;&#22240;&#20026;&#20869;&#24314;&#36816;&#31639;&#31526;&#20801;&#35768;&#36825;&#26679;&#20570;&#12290;</p>
<p>&#24120;&#35265;&#30340;&#37325;&#36733;&#36816;&#31639;&#31526;&#25317;&#26377;&#19979;&#21015;&#20856;&#22411;&#12289;&#35268;&#33539;&#24418;&#24335;&#65306;<sup id="cite_ref-1" class="reference"><a href="cpp-language-operators.html#cite_note-1">[1]</a></sup></p>
<h4><span class="mw-headline" id=".E8.B5.8B.E5.80.BC.E8.BF.90.E7.AE.97.E7.AC.A6">&#36171;&#20540;&#36816;&#31639;&#31526;</span></h4>
<p>&#36171;&#20540;&#36816;&#31639;&#31526;&#65288;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">=</span></span></span>&#65289;&#26377;&#29305;&#27530;&#24615;&#36136;&#65306;&#32454;&#33410;&#35265;<a href="cpp-language-copy_assignment.html">&#22797;&#21046;&#36171;&#20540;</a>&#19982;<a href="cpp-language-move_assignment.html">&#31227;&#21160;&#36171;&#20540;</a>&#12290;</p>
<p>&#23545;&#35268;&#33539;&#30340;&#22797;&#21046;&#36171;&#20540;&#36816;&#31639;&#31526;&#65292;&#26399;&#24453;&#23427;<a rel="nofollow" class="external text" href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c62-make-copy-assignment-safe-for-self-assignment">&#22312;&#33258;&#36171;&#20540;&#26102;&#19981;&#36827;&#34892;&#25805;&#20316;</a>&#65292;&#24182;&#25353;&#24341;&#29992;&#36820;&#22238;&#24038;&#25805;&#20316;&#25968;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// &#22797;&#21046;&#36171;&#20540;</span>
T<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&amp;</span> other<span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#38450;&#27490;&#33258;&#36171;&#20540;</span>
<span class="kw1">if</span> <span class="br0">(</span>this <span class="sy1">==</span> <span class="sy3">&amp;</span>other<span class="br0">)</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span>
<span class="co1">// &#20551;&#35774; *this &#20445;&#26377;&#21487;&#37325;&#29992;&#36164;&#28304;&#65292;&#20363;&#22914;&#19968;&#20010;&#20998;&#37197;&#20110;&#22534;&#30340;&#32531;&#20914;&#21306; mArray</span>
<span class="kw1">if</span> <span class="br0">(</span>size <span class="sy3">!</span><span class="sy1">=</span> other.<span class="me1">size</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// *this &#20013;&#30340;&#23384;&#20648;&#19981;&#21487;&#22797;&#29992;</span>
delete<span class="br0">[</span><span class="br0">]</span> mArray<span class="sy4">;</span> <span class="co1">// &#38144;&#27585; *this &#20013;&#30340;&#23384;&#20648;</span>
mArray <span class="sy1">=</span> nullptr<span class="sy4">;</span>
size <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// &#22312;&#19979;&#19968;&#34892;&#25243;&#20986;&#30340;&#24773;&#20917;&#19979;&#32500;&#25345;&#19981;&#21464;&#24335;</span>
mArray <span class="sy1">=</span> new <span class="kw4">int</span><span class="br0">[</span>other.<span class="me1">size</span><span class="br0">]</span><span class="sy4">;</span> <span class="co1">// &#20998;&#37197; *this &#20013;&#30340;&#23384;&#20648;</span>
size <span class="sy1">=</span> other.<span class="me1">size</span><span class="sy4">;</span>
<span class="br0">}</span>
<a href="cpp-algorithm-copy.html"><span class="kw1582">std::<span class="me2">copy</span></span></a><span class="br0">(</span>other.<span class="me1">mArray</span>, other.<span class="me1">mArray</span> <span class="sy2">+</span> other.<span class="me1">size</span>, mArray<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#23545;&#35268;&#33539;&#30340;&#31227;&#21160;&#36171;&#20540;&#65292;&#26399;&#24453;&#23427;<a rel="nofollow" class="external text" href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c64-a-move-operation-should-move-and-leave-its-source-in-a-valid-state">&#20196;&#34987;&#31227;&#21160;&#23545;&#35937;&#36951;&#30041;&#20110;&#21512;&#27861;&#29366;&#24577;</a>&#65288;&#21363;&#26377;&#23436;&#22909;&#31867;&#19981;&#21464;&#24335;&#30340;&#29366;&#24577;&#65289;&#65292;&#19988;&#22312;&#33258;&#36171;&#20540;&#26102;&#35201;&#20040;<a rel="nofollow" class="external text" href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c65-make-move-assignment-safe-for-self-assignment">&#19981;&#20570;&#20219;&#20309;&#20107;</a>&#65292;&#35201;&#20040;&#33267;&#23569;&#36951;&#30041;&#23545;&#35937;&#20110;&#21512;&#27861;&#29366;&#24577;&#65292;&#24182;&#20197;&#38750; const &#24341;&#29992;&#36820;&#22238;&#24038;&#25805;&#20316;&#25968;&#65292;&#32780;&#19988;&#26159; noexcept &#30340;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1">T<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span>T<span class="sy3">&amp;&amp;</span> other<span class="br0">)</span> <span class="kw1">noexcept</span> <span class="co1">// &#31227;&#21160;&#36171;&#20540;</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> <span class="co1">// &#33258;&#36171;&#20540;&#26102;&#26080;&#25805;&#20316;&#65288;delete[]/size=0 &#20063;&#21487;&#20197;&#65289;</span>
delete<span class="br0">[</span><span class="br0">]</span> mArray<span class="sy4">;</span> <span class="co1">// &#37322;&#25918; *this &#20013;&#30340;&#36164;&#28304;</span>
mArray <span class="sy1">=</span> <a href="cpp-utility-exchange.html"><span class="kw1118">std::<span class="me2">exchange</span></span></a><span class="br0">(</span>other.<span class="me1">mArray</span>, nullptr<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20196; other &#36951;&#30041;&#20110;&#21512;&#27861;&#29366;&#24577;</span>
size <span class="sy1">=</span> <a href="cpp-utility-exchange.html"><span class="kw1118">std::<span class="me2">exchange</span></span></a><span class="br0">(</span>other.<span class="me1">size</span>, <span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#22312;&#22797;&#21046;&#36171;&#20540;&#19981;&#33021;&#20174;&#36164;&#28304;&#22797;&#29992;&#20013;&#21463;&#30410;&#30340;&#24773;&#24418;&#19979;&#65288;&#23427;&#19981;&#31649;&#29702;&#22534;&#20998;&#37197;&#25968;&#32452;&#65292;&#19988;&#19981;&#21547;&#36825;&#20040;&#20570;&#30340;&#65288;&#21487;&#33021;&#20256;&#36882;&#30340;&#65289;&#25104;&#21592;&#65292;&#20363;&#22914; <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span> &#25110; <span class="t-lc"><a href="cpp-string-basic_string.html">std::string</a></span> &#25104;&#21592;&#65289;&#65292;&#26377;&#19968;&#31181;&#27969;&#34892;&#30340;&#20415;&#25463;&#26041;&#24335;&#65306;&#22797;&#21046;&#24182;&#20132;&#25442;&#65288;copy-and-swap&#65289;&#36171;&#20540;&#36816;&#31639;&#31526;&#65292;&#23427;&#25353;&#20540;&#25509;&#25910;&#24418;&#21442;&#65288;&#20174;&#32780;&#26681;&#25454;&#23454;&#21442;&#30340;&#20540;&#31867;&#21035;&#32780;&#21516;&#26102;&#25903;&#25345;&#22797;&#21046;&#21644;&#31227;&#21160;&#36171;&#20540;&#65289;&#65292;&#20132;&#25442;&#24418;&#21442;&#65292;&#24182;&#20196;&#26512;&#26500;&#20989;&#25968;&#36827;&#34892;&#28165;&#29702;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// &#22797;&#21046;&#36171;&#20540;&#65288;&#22797;&#21046;&#24182;&#20132;&#25442;&#65289;</span>
T<span class="sy3">&amp;</span> T<span class="sy4">::</span><span class="me2">operator</span><span class="sy1">=</span><span class="br0">(</span>T other<span class="br0">)</span> <span class="kw1">noexcept</span> <span class="co1">// &#35843;&#29992;&#22797;&#21046;/&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;&#20197;&#26500;&#36896; other</span>
<span class="br0">{</span>
<a href="cpp-algorithm-swap.html"><span class="kw1599">std::<span class="me2">swap</span></span></a><span class="br0">(</span>size, other.<span class="me1">size</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#22312; *this &#19982; other &#38388;&#20132;&#25442;&#36164;&#28304;</span>
<a href="cpp-algorithm-swap.html"><span class="kw1599">std::<span class="me2">swap</span></span></a><span class="br0">(</span>mArray, other.<span class="me1">mArray</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span>
<span class="br0">}</span> <span class="co1">// &#35843;&#29992; other &#30340;&#26512;&#26500;&#20989;&#25968;&#20197;&#37322;&#25918;&#20808;&#21069; *this &#25152;&#20445;&#26377;&#30340;&#36164;&#28304;</span></pre></div>
</div>
<p>&#36825;&#31181;&#24418;&#24335;&#33258;&#21160;&#25552;&#20379;<a href="cpp-language-exceptions.html#.E5.BC.82.E5.B8.B8.E5.AE.89.E5.85.A8">&#24378;&#24322;&#24120;&#20445;&#35777;</a>&#65292;&#20294;&#31105;&#27490;&#36164;&#28304;&#22797;&#29992;&#12290;</p>
<h4><span class="mw-headline" id=".E6.B5.81.E7.9A.84.E6.8F.90.E5.8F.96.E4.B8.8E.E6.8F.92.E5.85.A5">&#27969;&#30340;&#25552;&#21462;&#19982;&#25554;&#20837;</span></h4>
<p>&#25509;&#21463; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-basic_istream.html"><span class="kw1727">std::<span class="me2">istream</span></span></a><span class="sy3">&amp;</span></span></span> &#25110; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span></span></span> &#20316;&#20026;&#24038;&#20391;&#23454;&#21442;&#30340; <code>operator&gt;&gt;</code> &#19982; <code>operator&lt;&lt;</code> &#30340;&#37325;&#36733;&#65292;&#34987;&#31216;&#20026;&#25554;&#20837;&#19982;&#25552;&#21462;&#36816;&#31639;&#31526;&#12290;&#22240;&#20026;&#23427;&#20204;&#25509;&#25910;&#29992;&#25143;&#23450;&#20041;&#31867;&#22411;&#20026;&#21491;&#23454;&#21442;&#65288;<span class="t-spar">a@b</span> &#20013;&#30340; <code>b</code>&#65289;&#65292;&#25152;&#20197;&#23427;&#20204;&#24517;&#39035;&#20197;&#38750;&#25104;&#21592;&#23454;&#29616;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> os, <span class="kw4">const</span> T<span class="sy3">&amp;</span> obj<span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#21521;&#27969;&#20889;&#20837; obj</span>
<span class="kw1">return</span> os<span class="sy4">;</span>
<span class="br0">}</span>
<a href="cpp-io-basic_istream.html"><span class="kw1727">std::<span class="me2">istream</span></span></a><span class="sy3">&amp;</span> operator<span class="sy1">&gt;&gt;</span><span class="br0">(</span><a href="cpp-io-basic_istream.html"><span class="kw1727">std::<span class="me2">istream</span></span></a><span class="sy3">&amp;</span> is, T<span class="sy3">&amp;</span> obj<span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#20174;&#27969;&#35835;&#21462; obj</span>
<span class="kw1">if</span><span class="br0">(</span> <span class="coMULTI">/* &#19981;&#33021;&#26500;&#36896; T */</span> <span class="br0">)</span>
is.<span class="me1">setstate</span><span class="br0">(</span>std<span class="sy4">::</span><span class="me2">ios</span><span class="sy4">::</span><span class="me2">failbit</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">return</span> is<span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#36825;&#20123;&#36816;&#31639;&#31526;&#26377;&#26102;&#23454;&#29616;&#20026;<a href="cpp-language-friend.html">&#21451;&#20803;&#20989;&#25968;</a>&#12290;</p>
<h4><span class="mw-headline" id=".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;&#36816;&#31639;&#31526;</span></h4>
<p>&#24403;&#29992;&#25143;&#23450;&#20041;&#30340;&#31867;&#37325;&#36733;&#20102;&#20989;&#25968;&#35843;&#29992;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">(</span><span class="br0">)</span></span></span> &#26102;&#65292;&#23427;&#23601;&#25104;&#20026;<a href="cpp-named_req-FunctionObject.html"><span style="font-style:italic">&#20989;&#25968;&#23545;&#35937;</span> <span style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; font-style:italic">(FunctionObject)</span></a> &#31867;&#22411;&#12290;</p>
<p>&#36825;&#31181;&#31867;&#22411;&#30340;&#23545;&#35937;&#33021;&#29992;&#20110;&#20989;&#25968;&#35843;&#29992;&#24335;&#30340;&#34920;&#36798;&#24335;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// &#27492;&#31867;&#22411;&#30340;&#23545;&#35937;&#34920;&#31034;&#19968;&#20010;&#21464;&#37327;&#30340;&#32447;&#24615;&#20989;&#25968; a*x + b &#12290;</span>
<span class="kw1">struct</span> Linear <span class="br0">{</span>
<span class="kw4">double</span> a, b<span class="sy4">;</span>
<span class="kw4">double</span> operator<span class="br0">(</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">double</span> x<span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span>
<span class="kw1">return</span> a<span class="sy2">*</span>x <span class="sy2">+</span> b<span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
Linear f<span class="br0">{</span><span class="nu0">2</span>, <span class="nu0">1</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#34920;&#31034;&#20989;&#25968; 2x + 1 &#12290;</span>
Linear g<span class="br0">{</span><span class="sy2">-</span><span class="nu0">1</span>, <span class="nu0">0</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#34920;&#31034;&#20989;&#25968; -x &#12290;</span>
<span class="co1">// f &#19982; g &#20026;&#33021;&#20687;&#20989;&#25968;&#19968;&#26679;&#20351;&#29992;&#30340;&#23545;&#35937;&#12290;</span>
<span class="kw4">double</span> f_0 <span class="sy1">=</span> f<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">double</span> f_1 <span class="sy1">=</span> f<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">double</span> g_0 <span class="sy1">=</span> g<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#19979;&#38754;&#26159;&#19981;&#20351;&#29992;&#37325;&#36733;&#20294;&#25317;&#26377;&#32570;&#28857;&#30340;&#20004;&#20010;&#26367;&#20195;&#21697;&#12290; 1. &#20351;&#29992;&#20840;&#23616;&#21464;&#37327;&#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> a, b<span class="sy4">;</span> <span class="co1">// &#22351;&#65306;&#20840;&#23616;&#21464;&#37327;&#12290;</span>
<span class="kw4">double</span> linear<span class="br0">(</span><span class="kw4">double</span> x<span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">return</span> a<span class="sy2">*</span>x <span class="sy2">+</span> b<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>
a <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span> b <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
<span class="kw4">double</span> f_0 <span class="sy1">=</span> linear<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">double</span> f_1 <span class="sy1">=</span> linear<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#22351;&#65306;&#38656;&#35201;&#37325;&#26032;&#36171;&#20540;&#21442;&#25968;&#20351;&#24471;&#33021;&#22815;&#35745;&#31639;&#19981;&#21516;&#30340;&#20989;&#25968;&#65306;</span>
a <span class="sy1">=</span> <span class="sy2">-</span><span class="nu0">1</span><span class="sy4">;</span> b <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="kw4">double</span> g_0 <span class="sy1">=</span> linear<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>2. &#20351;&#29992;&#39069;&#22806;&#21442;&#25968;&#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> linear<span class="br0">(</span><span class="kw4">double</span> a, <span class="kw4">double</span> b, <span class="kw4">double</span> x<span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">return</span> a<span class="sy2">*</span>x <span class="sy2">+</span> b<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">double</span> f_0 <span class="sy1">=</span> linear<span class="br0">(</span><span class="nu0">2</span>, <span class="nu0">1</span>, <span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#22351;&#65306;&#24517;&#39035;&#37325;&#22797;&#36755;&#20837;&#21516;&#19968;&#21442;&#25968;&#65306;</span>
<span class="kw4">double</span> f_1 <span class="sy1">=</span> linear<span class="br0">(</span><span class="nu0">2</span>, <span class="nu0">1</span>, <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">double</span> g_0 <span class="sy1">=</span> linear<span class="br0">(</span><span class="sy2">-</span><span class="nu0">1</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#20174; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-algorithm-sort.html"><span class="kw1618">std::<span class="me2">sort</span></span></a></span></span> &#21040; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-algorithm-accumulate.html"><span class="kw1651">std::<span class="me2">accumulate</span></span></a></span></span> &#30340;&#35768;&#22810;&#26631;&#20934;&#31639;&#27861;&#37117;&#25509;&#21463;<a href="cpp-named_req-FunctionObject.html"><span style="font-style:italic">&#20989;&#25968;&#23545;&#35937;</span> <span style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; font-style:italic">(FunctionObject)</span></a> &#20197;&#23450;&#21046;&#20854;&#34892;&#20026;&#12290;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">(</span><span class="br0">)</span></span></span> &#27809;&#26377;&#29305;&#21035;&#20540;&#24471;&#27880;&#24847;&#30340;&#35268;&#33539;&#24418;&#24335;&#65292;&#27492;&#22788;&#28436;&#31034;&#20854;&#29992;&#27861;&#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> Sum
<span class="br0">{</span>
<span class="kw4">int</span> sum<span class="sy4">;</span>
Sum<span class="br0">(</span><span class="br0">)</span> <span class="sy4">:</span> sum<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="kw4">void</span> operator<span class="br0">(</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> n<span class="br0">)</span> <span class="br0">{</span> sum <span class="sy2">+</span><span class="sy1">=</span> n<span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
Sum s <span class="sy1">=</span> <a href="cpp-algorithm-for_each.html"><span class="kw1568">std::<span class="me2">for_each</span></span></a><span class="br0">(</span>v.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span>, v.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span>, Sum<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span></pre></div>
</div>
<p>&#21442;&#38405; <a href="cpp-language-lambda.html">lambda</a> &#12290;</p>
<h4><span class="mw-headline" id=".E8.87.AA.E5.A2.9E.E4.B8.8E.E8.87.AA.E5.87.8F">&#33258;&#22686;&#19982;&#33258;&#20943;</span></h4>
<p>&#24403;&#34920;&#36798;&#24335;&#20013;&#20986;&#29616;&#21518;&#32512;&#33258;&#22686;&#19982;&#33258;&#20943;&#26102;&#65292;&#20197;&#19968;&#20010;&#25972;&#25968;&#23454;&#21442; <code>0</code> &#35843;&#29992;&#29992;&#25143;&#23450;&#20041;&#20989;&#25968;&#65288;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy2">++</span></span></span> &#25110; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy2">--</span></span></span>&#65289;&#12290;&#23427;&#20856;&#22411;&#22320;&#23454;&#29616;&#20026; <span class="t-c"><span class="mw-geshi cpp source-cpp">T operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span></span></span>&#65292;&#20854;&#20013;&#21442;&#25968;&#34987;&#24573;&#30053;&#12290;&#21518;&#32512;&#33258;&#22686;&#19982;&#33258;&#20943;&#36816;&#31639;&#31526;&#36890;&#24120;&#20197;&#21069;&#32512;&#29256;&#26412;&#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="co1">// &#21069;&#32512;&#33258;&#22686;</span>
X<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#23454;&#38469;&#19978;&#30340;&#33258;&#22686;&#22312;&#27492;&#36827;&#34892;</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span> <span class="co1">// &#20197;&#24341;&#29992;&#36820;&#22238;&#26032;&#20540;</span>
<span class="br0">}</span>
<span class="co1">// &#21518;&#32512;&#33258;&#22686;</span>
X operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span>
<span class="br0">{</span>
X old <span class="sy1">=</span> <span class="sy2">*</span>this<span class="sy4">;</span> <span class="co1">// &#22797;&#21046;&#26087;&#20540;</span>
operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21069;&#32512;&#33258;&#22686;</span>
<span class="kw1">return</span> old<span class="sy4">;</span> <span class="co1">// &#36820;&#22238;&#26087;&#20540;</span>
<span class="br0">}</span>
<span class="co1">// &#21069;&#32512;&#33258;&#20943;</span>
X<span class="sy3">&amp;</span> operator<span class="sy2">--</span><span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// &#23454;&#38469;&#19978;&#30340;&#33258;&#20943;&#22312;&#27492;&#36827;&#34892;</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span> <span class="co1">// &#20197;&#24341;&#29992;&#36820;&#22238;&#26032;&#20540;</span>
<span class="br0">}</span>
<span class="co1">// &#21518;&#32512;&#33258;&#20943;</span>
X operator<span class="sy2">--</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span>
<span class="br0">{</span>
X old <span class="sy1">=</span> <span class="sy2">*</span>this<span class="sy4">;</span> <span class="co1">// &#22797;&#21046;&#26087;&#20540;</span>
operator<span class="sy2">--</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21069;&#32512;&#33258;&#20943;</span>
<span class="kw1">return</span> old<span class="sy4">;</span> <span class="co1">// &#36820;&#22238;&#26087;&#20540;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span><span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#23613;&#31649;&#21069;&#33258;&#22686;/&#21069;&#33258;&#20943;&#30340;&#35268;&#33539;&#24418;&#24335;&#26159;&#36820;&#22238;&#24341;&#29992;&#30340;&#65292;&#20294;&#21516;&#20219;&#20309;&#36816;&#31639;&#31526;&#37325;&#36733;&#19968;&#26679;&#65292;&#23427;&#30340;&#36820;&#22238;&#31867;&#22411;&#26159;&#29992;&#25143;&#23450;&#20041;&#30340;&#65307;&#20363;&#22914;&#36825;&#20123;&#36816;&#31639;&#31526;&#23545; <span class="t-lc"><a href="cpp-atomic-atomic.html">std::atomic</a></span> &#30340;&#37325;&#36733;&#20197;&#20540;&#36820;&#22238;&#12290;</p>
<h4><span class="mw-headline" id=".E4.BA.8C.E5.85.83.E7.AE.97.E6.9C.AF.E8.BF.90.E7.AE.97.E7.AC.A6">&#20108;&#20803;&#31639;&#26415;&#36816;&#31639;&#31526;</span></h4>
<p>&#20856;&#22411;&#24773;&#20917;&#19979;&#65292;&#20108;&#20803;&#36816;&#31639;&#31526;&#37117;&#34987;&#23454;&#29616;&#20026;&#38750;&#25104;&#21592;&#20197;&#32500;&#25345;&#23545;&#31216;&#24615;&#65288;&#20363;&#22914;&#65292;&#23558;&#22797;&#25968;&#19982;&#25972;&#25968;&#30456;&#21152;&#26102;&#65292;&#22914;&#26524; <code>operator+</code> &#26159;&#22797;&#25968;&#31867;&#22411;&#30340;&#25104;&#21592;&#20989;&#25968;&#65292;&#37027;&#20040;&#21482;&#26377;<span class="t-c"><span class="mw-geshi cpp source-cpp">&#22797;&#25968;<span class="sy2">+</span>&#25972;&#25968;</span></span>&#33021;&#32534;&#35793;&#65292;&#32780;<span class="t-c"><span class="mw-geshi cpp source-cpp">&#25972;&#25968;<span class="sy2">+</span>&#22797;&#25968;</span></span>&#19981;&#33021;&#65289;&#12290;&#22240;&#20026;&#23545;&#20110;&#27599;&#20010;&#20108;&#20803;&#31639;&#26415;&#36816;&#31639;&#31526;&#37117;&#23384;&#22312;&#23545;&#24212;&#30340;&#22797;&#21512;&#36171;&#20540;&#36816;&#31639;&#31526;&#65292;&#25152;&#20197;&#20108;&#20803;&#36816;&#31639;&#31526;&#30340;&#35268;&#33539;&#24418;&#24335;&#26159;&#22522;&#20110;&#20854;&#23545;&#24212;&#30340;&#22797;&#21512;&#36171;&#20540;&#23454;&#29616;&#30340;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> X
<span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
X<span class="sy3">&amp;</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span> <span class="co1">// &#22797;&#21512;&#36171;&#20540;&#65288;&#19981;&#24517;&#65292;&#20294;&#36890;&#24120;&#26159;&#25104;&#21592;&#20989;&#25968;&#65292;&#20197;&#20462;&#25913;&#31169;&#26377;&#25104;&#21592;&#65289;</span>
<span class="br0">{</span>
<span class="coMULTI">/* &#23558; rhs &#21152;&#21040; *this &#21457;&#29983;&#20110;&#27492; */</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span> <span class="co1">// &#20197;&#24341;&#29992;&#36820;&#22238;&#32467;&#26524;</span>
<span class="br0">}</span>
<span class="co1">// &#23450;&#20041;&#20110;&#31867;&#20307;&#20869;&#30340;&#21451;&#20803;&#26159; inline &#30340;&#65292;&#19988;&#22312;&#38750; ADL &#26597;&#25214;&#20013;&#34987;&#38544;&#34255;</span>
<span class="kw1">friend</span> X operator<span class="sy2">+</span><span class="br0">(</span>X lhs, <span class="co1">// &#25353;&#20540;&#20256;&#36882; lhs &#26377;&#21161;&#20110;&#20248;&#21270;&#38142;&#29366;&#30340; a+b+c</span>
<span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span> <span class="co1">// &#21542;&#21017;&#65292;&#20004;&#20010;&#24418;&#21442;&#37117;&#26159; const &#24341;&#29992;</span>
<span class="br0">{</span>
lhs <span class="sy2">+</span><span class="sy1">=</span> rhs<span class="sy4">;</span> <span class="co1">// &#22797;&#29992;&#22797;&#21512;&#36171;&#20540;</span>
<span class="kw1">return</span> lhs<span class="sy4">;</span> <span class="co1">// &#20197;&#20540;&#36820;&#22238;&#32467;&#26524;&#65288;&#20351;&#29992;&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;&#65289;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.AF.94.E8.BE.83.E8.BF.90.E7.AE.97.E7.AC.A6">&#27604;&#36739;&#36816;&#31639;&#31526;</span></h4>
<p>&#26631;&#20934;&#65288;&#24211;&#30340;&#65289;&#31639;&#27861;&#65288;&#22914; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-algorithm-sort.html"><span class="kw1618">std::<span class="me2">sort</span></span></a></span></span>&#65289;&#21644;&#23481;&#22120;&#65288;&#22914; <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-container-set.html"><span class="kw1277">std::<span class="me2">set</span></span></a></span></span>&#65289;&#22312;&#40664;&#35748;&#24773;&#20917;&#19979;&#26399;&#24453; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;</span></span></span> &#23545;&#20110;&#29992;&#25143;&#25552;&#20379;&#30340;&#31867;&#22411;&#26377;&#23450;&#20041;&#65292;&#24182;&#26399;&#24453;&#23427;&#23454;&#29616;&#20005;&#26684;&#24369;&#24207;&#65288;&#20174;&#32780;&#28385;&#36275;<a href="cpp-named_req-Compare.html"><span style="font-style:italic">&#27604;&#36739;</span> <span style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; font-style:italic">(Compare)</span></a> &#35201;&#27714;&#65289;&#12290;&#19968;&#31181;&#20026;&#32467;&#26500;&#20307;&#23454;&#29616;&#20005;&#26684;&#24369;&#24207;&#30340;&#24815;&#29992;&#26041;&#24335;&#26159;&#20351;&#29992; <span class="t-lc"><a href="cpp-utility-tuple-tie.html">std::tie</a></span> &#25552;&#20379;&#30340;&#23383;&#20856;&#24207;&#27604;&#36739;&#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> Record
<span class="br0">{</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> name<span class="sy4">;</span>
<span class="kw4">unsigned</span> <span class="kw4">int</span> floor<span class="sy4">;</span>
<span class="kw4">double</span> weight<span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;</span><span class="br0">(</span><span class="kw4">const</span> Record<span class="sy3">&amp;</span> l, <span class="kw4">const</span> Record<span class="sy3">&amp;</span> r<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">return</span> <a href="cpp-utility-tuple-tie.html"><span class="kw1113">std::<span class="me2">tie</span></span></a><span class="br0">(</span>l.<span class="me1">name</span>, l.<span class="me1">floor</span>, l.<span class="me1">weight</span><span class="br0">)</span>
<span class="sy1">&lt;</span> <a href="cpp-utility-tuple-tie.html"><span class="kw1113">std::<span class="me2">tie</span></span></a><span class="br0">(</span>r.<span class="me1">name</span>, r.<span class="me1">floor</span>, r.<span class="me1">weight</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20445;&#25345;&#30456;&#21516;&#39034;&#24207;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#20856;&#22411;&#22320;&#65292;&#19968;&#26086;&#25552;&#20379;&#20102; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;</span></span></span>&#65292;&#20854;&#20182;&#20851;&#31995;&#36816;&#31639;&#31526;&#23601;&#37117;&#33021;&#36890;&#36807; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;</span></span></span> &#26469;&#23454;&#29616;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;</span> <span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="coMULTI">/* &#20570;&#23454;&#38469;&#27604;&#36739; */</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;</span> <span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> rhs <span class="sy1">&lt;</span> lhs<span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;=</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> <span class="sy3">!</span><span class="br0">(</span>lhs <span class="sy1">&gt;</span> rhs<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;=</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> <span class="sy3">!</span><span class="br0">(</span>lhs <span class="sy1">&lt;</span> rhs<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span></pre></div>
</div>
<p>&#31867;&#20284;&#22320;&#65292;&#19981;&#30456;&#31561;&#36816;&#31639;&#31526;&#20856;&#22411;&#22320;&#36890;&#36807; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">==</span></span></span> &#26469;&#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">inline</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="coMULTI">/* &#20570;&#23454;&#38469;&#27604;&#36739; */</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy3">!</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> <span class="sy3">!</span><span class="br0">(</span>lhs <span class="sy1">==</span> rhs<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span></pre></div>
</div>
<p>&#24403;&#25552;&#20379;&#20102;&#19977;&#36335;&#27604;&#36739;&#65288;&#22914; <span class="t-lc"><a href="cpp-string-byte-memcmp.html">std::memcmp</a></span> &#25110; <span class="t-lc"><a href="cpp-string-basic_string-compare.html">std::string::compare</a></span>&#65289;&#26102;&#65292;&#25152;&#26377;&#20845;&#20010;&#21452;&#36335;&#27604;&#36739;&#36816;&#31639;&#31526;&#37117;&#33021;&#36890;&#36807;&#23427;&#34920;&#36798;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> cmp<span class="br0">(</span>lhs,rhs<span class="br0">)</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy3">!</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> cmp<span class="br0">(</span>lhs,rhs<span class="br0">)</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;</span> <span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> cmp<span class="br0">(</span>lhs,rhs<span class="br0">)</span> <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;</span> <span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> cmp<span class="br0">(</span>lhs,rhs<span class="br0">)</span> <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;=</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> cmp<span class="br0">(</span>lhs,rhs<span class="br0">)</span> <span class="sy1">&lt;=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">inline</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;=</span><span class="br0">(</span><span class="kw4">const</span> X<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> X<span class="sy3">&amp;</span> rhs<span class="br0">)</span><span class="br0">{</span> <span class="kw1">return</span> cmp<span class="br0">(</span>lhs,rhs<span class="br0">)</span> <span class="sy1">&gt;=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<p>&#22914;&#26524;&#23450;&#20041;&#20102; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">==</span></span></span> &#65292;&#37027;&#20040;&#32534;&#35793;&#22120;&#20250;&#33258;&#21160;&#29983;&#25104;&#19981;&#31561;&#36816;&#31639;&#31526;&#12290;&#31867;&#20284;&#22320;&#65292;&#22914;&#26524;&#23450;&#20041;&#20102;&#19977;&#36335;&#27604;&#36739;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;=&gt;</span></span></span> &#65292;&#37027;&#20040;&#32534;&#35793;&#22120;&#20250;&#33258;&#21160;&#29983;&#25104;&#22235;&#20010;&#20851;&#31995;&#36816;&#31639;&#31526;&#12290;&#22914;&#26524;&#23450;&#20041; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;=&gt;</span></span></span> &#20026;&#39044;&#32622;&#65292;&#37027;&#20040;&#32534;&#35793;&#22120;&#20250;&#29983;&#25104; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">==</span></span></span> &#21644; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;=&gt;</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="kw1">struct</span> Record
<span class="br0">{</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> name<span class="sy4">;</span>
<span class="kw4">unsigned</span> <span class="kw4">int</span> floor<span class="sy4">;</span>
<span class="kw4">double</span> weight<span class="sy4">;</span>
<span class="kw4">auto</span> operator<span class="sy1">&lt;=&gt;</span><span class="br0">(</span><span class="kw4">const</span> Record<span class="sy3">&amp;</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#29616;&#22312;&#33021;&#29992; ==&#12289;!=&#12289;&lt;&#12289;&lt;=&#12289;&gt; &#21644; &gt;= &#27604;&#36739; Record</span></pre></div>
</div>
<p>&#32454;&#33410;&#35265;<a href="cpp-language-default_comparisons.html">&#40664;&#35748;&#27604;&#36739;</a>&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<h4><span class="mw-headline" id=".E6.95.B0.E7.BB.84.E4.B8.8B.E6.A0.87.E8.BF.90.E7.AE.97.E7.AC.A6">&#25968;&#32452;&#19979;&#26631;&#36816;&#31639;&#31526;</span></h4>
<p>&#25552;&#20379;&#25968;&#32452;&#24335;&#35775;&#38382;&#24182;&#21516;&#26102;&#20801;&#35768;&#35835;&#20889;&#30340;&#29992;&#25143;&#23450;&#20041;&#31867;&#65292;&#20856;&#22411;&#22320;&#20026; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">[</span><span class="br0">]</span></span></span> &#23450;&#20041;&#20004;&#20010;&#37325;&#36733;&#65306;const &#21644;&#38750; const &#21464;&#20307;&#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> T
<span class="br0">{</span>
value_t<span class="sy3">&amp;</span> operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> idx<span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> mVector<span class="br0">[</span>idx<span class="br0">]</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">const</span> value_t<span class="sy3">&amp;</span> operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> idx<span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="kw1">return</span> mVector<span class="br0">[</span>idx<span class="br0">]</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#22914;&#26524;&#24050;&#30693;&#20540;&#31867;&#22411;&#26159;&#26631;&#37327;&#31867;&#22411;&#65292;&#37027;&#20040; const &#21464;&#20307;&#24212;&#25353;&#20540;&#36820;&#22238;&#12290;</p>
<p>&#24403;&#19981;&#24076;&#26395;&#25110;&#19981;&#21487;&#33021;&#30452;&#25509;&#35775;&#38382;&#23481;&#22120;&#20803;&#32032;&#65292;&#25110;&#32773;&#35201;&#21306;&#21035;&#24038;&#20540;&#65288;<span class="t-c"><span class="mw-geshi cpp source-cpp">c<span class="br0">[</span>i<span class="br0">]</span> <span class="sy1">=</span> v<span class="sy4">;</span></span></span>&#65289;&#21644;&#21491;&#20540;&#65288;<span class="t-c"><span class="mw-geshi cpp source-cpp">v <span class="sy1">=</span> c<span class="br0">[</span>i<span class="br0">]</span><span class="sy4">;</span></span></span>&#65289;&#30340;&#19981;&#21516;&#29992;&#27861;&#26102;&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">[</span><span class="br0">]</span></span></span> &#21487;&#20197;&#36820;&#22238;&#20195;&#29702;&#12290;&#31034;&#20363;&#35265; <span class="t-lc"><a href="cpp-utility-bitset-operator_at.html">std::bitset::operator[]</a></span>&#12290;</p>
<p>&#30001;&#20110; C++23 &#21069;&#19979;&#26631;&#36816;&#31639;&#31526;&#20165;&#33021;&#25509;&#25910;&#19968;&#20010;&#19979;&#26631;&#65292;&#20026;&#25552;&#20379;&#22810;&#32500;&#25968;&#32452;&#35775;&#38382;&#35821;&#20041;&#65292;&#20363;&#22914;&#23454;&#29616;&#19977;&#32500;&#25968;&#32452;&#35775;&#38382; <span class="t-c"><span class="mw-geshi cpp source-cpp">a<span class="br0">[</span>i<span class="br0">]</span><span class="br0">[</span>j<span class="br0">]</span><span class="br0">[</span>k<span class="br0">]</span> <span class="sy1">=</span> x<span class="sy4">;</span></span></span>&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">[</span><span class="br0">]</span></span></span> &#24517;&#39035;&#36820;&#22238;&#21040;&#20108;&#32500;&#24179;&#38754;&#30340;&#24341;&#29992;&#65292;&#23427;&#24517;&#39035;&#25317;&#26377;&#33258;&#24049;&#30340; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">[</span><span class="br0">]</span></span></span> &#24182;&#36820;&#22238;&#21040;&#19968;&#32500;&#34892;&#30340;&#24341;&#29992;&#65292;&#32780;&#34892;&#24517;&#39035;&#25317;&#26377;&#36820;&#22238;&#21040;&#20803;&#32032;&#30340;&#24341;&#29992;&#30340; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">[</span><span class="br0">]</span></span></span>&#12290;&#20026;&#36991;&#20813;&#36825;&#31181;&#22797;&#26434;&#24615;&#65292;&#19968;&#20123;&#24211;&#36873;&#25321;&#20195;&#20043;&#20197;&#37325;&#36733; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">(</span><span class="br0">)</span></span></span>&#65292;&#20351;&#24471; 3D &#35775;&#38382;&#34920;&#36798;&#24335;&#25317;&#26377; Fortran &#24335;&#30340;&#35821;&#27861; <span class="t-c"><span class="mw-geshi cpp source-cpp">a<span class="br0">(</span>i, j, k<span class="br0">)</span> <span class="sy1">=</span> x<span class="sy4">;</span></span></span>&#12290;</p>
<p>C++23 &#36215;&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">[</span><span class="br0">]</span></span></span> &#33021;&#25509;&#25910;&#22810;&#20110;&#19968;&#20010;&#19979;&#26631;&#12290;&#20363;&#22914; 3D &#25968;&#32452;&#31867;&#30340;&#19968;&#20010;&#22768;&#26126;&#20026; <span class="t-c"><span class="mw-geshi cpp source-cpp">T<span class="sy3">&amp;</span> operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> x, <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> y, <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> z<span class="br0">)</span><span class="sy4">;</span></span></span> &#30340; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="br0">[</span><span class="br0">]</span></span></span> &#33021;&#30452;&#25509;&#35775;&#38382;&#20803;&#32032;&#12290;</p>
<h4><span class="mw-headline" id=".E9.80.90.E4.BD.8D.E7.AE.97.E6.9C.AF.E8.BF.90.E7.AE.97.E7.AC.A6">&#36880;&#20301;&#31639;&#26415;&#36816;&#31639;&#31526;</span></h4>
<p>&#23454;&#29616;<a href="cpp-named_req-BitmaskType.html"><span style="font-style:italic">&#20301;&#25513;&#30721;&#31867;&#22411;</span> <span style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; font-style:italic">(BitmaskType)</span></a> &#30340;&#35268;&#23450;&#30340;&#29992;&#25143;&#23450;&#20041;&#31867;&#21644;&#26522;&#20030;&#65292;&#35201;&#27714;&#37325;&#36733;&#36880;&#20301;&#31639;&#26415;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">&amp;</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">|</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">^</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator~</span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">&amp;</span><span class="sy1">=</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">|</span><span class="sy1">=</span></span></span> &#21450; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">^</span><span class="sy1">=</span></span></span>&#65292;&#32780;&#19988;&#21487;&#37325;&#36733;&#20301;&#31227;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;&lt;</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&gt;&gt;</span></span></span>&#12289;<span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&gt;&gt;=</span></span></span> &#21450; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1">&lt;&lt;=</span></span></span>&#12290;&#35268;&#33539;&#23454;&#29616;&#36890;&#24120;&#36981;&#24490;&#19978;&#36848;&#30340;&#20108;&#20803;&#31639;&#26415;&#36816;&#31639;&#31526;&#12290;</p>
<h4><span class="mw-headline" id=".E5.B8.83.E5.B0.94.E5.8F.96.E5.8F.8D.E8.BF.90.E7.AE.97.E7.AC.A6">&#24067;&#23572;&#21462;&#21453;&#36816;&#31639;&#31526;</span></h4>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx11">
<td>
<p>&#26377;&#24847;&#29992;&#20110;&#24067;&#23572;&#35821;&#22659;&#30340;&#29992;&#25143;&#23450;&#20041;&#31867;&#24120;&#37325;&#36733;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">!</span></span></span> &#12290;&#36825;&#31181;&#31867;&#20063;&#20250;&#25552;&#20379;&#29992;&#25143;&#23450;&#20041;&#36716;&#25442;&#20989;&#25968; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">explicit</span> operator <span class="kw4">bool</span><span class="br0">(</span><span class="br0">)</span></span></span>&#65288;&#26631;&#20934;&#24211;&#26679;&#20363;&#35265; <span class="t-lc"><a href="cpp-io-basic_ios.html">std::basic_ios</a></span>&#65289;&#65292;&#32780; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">!</span></span></span> &#30340;&#21463;&#26399;&#24453;&#34892;&#20026;&#26159;&#36820;&#22238; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="kw4">bool</span></span></span> &#30340;&#21462;&#21453;&#12290;</p>
</td>
<td><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></td>
</tr>
<tr class="t-rev t-since-cxx11">
<td>
<p>&#30001;&#20110;&#20869;&#24314;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span></span></span> &#36827;&#34892;<a href="cpp-language-implicit_conversion.html#.E6.8C.89.E8.AF.AD.E5.A2.83.E8.BD.AC.E6.8D.A2">&#25353;&#35821;&#22659;&#21040; <code>bool</code> &#30340;&#36716;&#25442;</a>&#65292;&#26377;&#24847;&#29992;&#20110;&#24067;&#23572;&#35821;&#22659;&#30340;&#29992;&#25143;&#23450;&#20041;&#31867;&#21487;&#20197;&#21482;&#25552;&#20379; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="kw4">bool</span></span></span> &#32780;&#26080;&#38656;&#37325;&#36733; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">!</span></span></span> &#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<h4><span class="mw-headline" id=".E7.BD.95.E6.9C.89.E9.87.8D.E8.BD.BD.E7.9A.84.E8.BF.90.E7.AE.97.E7.AC.A6">&#32597;&#26377;&#37325;&#36733;&#30340;&#36816;&#31639;&#31526;</span></h4>
<p>&#19979;&#21015;&#36816;&#31639;&#31526;&#32597;&#26377;&#37325;&#36733;&#65306;</p>
<ul>
<li>&#21462;&#22336;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">&amp;</span></span></span>&#12290;&#22914;&#26524;&#23545;&#19981;&#23436;&#25972;&#31867;&#22411;&#30340;&#24038;&#20540;&#24212;&#29992;&#19968;&#20803; &amp;&#65292;&#32780;&#23436;&#25972;&#31867;&#22411;&#22768;&#26126;&#20102;&#37325;&#36733;&#30340; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">&amp;</span></span></span>&#65292;&#37027;&#20040;<span class="t-rev-inl t-until-cxx11"><span>&#34892;&#20026;&#26410;&#23450;&#20041;</span> <span><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></span></span><span class="t-rev-inl t-since-cxx11"><span>&#36816;&#31639;&#31526;&#25317;&#26377;&#20869;&#24314;&#21547;&#20041;&#36824;&#26159;&#35843;&#29992;&#36816;&#31639;&#31526;&#20989;&#25968;&#26159;&#26410;&#25351;&#26126;&#30340;</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#12290;&#22240;&#20026;&#27492;&#36816;&#31639;&#31526;&#21487;&#33021;&#34987;&#37325;&#36733;&#65292;&#25152;&#20197;&#27867;&#22411;&#24211;&#37117;&#29992; <span class="t-lc"><a href="cpp-memory-addressof.html">std::addressof</a></span> &#21462;&#24471;&#29992;&#25143;&#23450;&#20041;&#31867;&#22411;&#30340;&#23545;&#35937;&#30340;&#22320;&#22336;&#12290;&#26368;&#20026;&#20154;&#29087;&#30693;&#30340;&#35268;&#33539;&#37325;&#36733;&#30340; operator&amp; &#26159; Microsoft &#31867; <a rel="nofollow" class="external text" href="https://docs.microsoft.com/en-us/cpp/atl/reference/ccomptrbase-class?view=msvc-160#operator_amp">CComPtrBase</a>&#12290;&#22312; <a rel="nofollow" class="external text" href="http://www.boost.org/doc/libs/release/libs/spirit/doc/html/spirit/qi/reference/operator/and_predicate.html">boost.spirit</a> &#20013;&#21487;&#20197;&#25214;&#21040;&#35813;&#36816;&#31639;&#31526;&#22312; EDSL &#30340;&#20351;&#29992;&#26696;&#20363;&#12290;</li>
<li>&#24067;&#23572;&#36923;&#36753;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">&amp;&amp;</span></span></span> &#19982; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy3">||</span></span></span>&#12290;&#19981;&#21516;&#20110;&#20869;&#24314;&#29256;&#26412;&#65292;&#37325;&#36733;&#29256;&#26412;&#26080;&#27861;&#23454;&#29616;&#30701;&#36335;&#27714;&#20540;&#12290;<span class="t-rev-inl t-until-cxx17"><span>&#32780;&#19988;&#19981;&#21516;&#20110;&#20869;&#24314;&#29256;&#26412;&#65292;&#23427;&#20204;&#20063;&#19981;&#20250;&#20196;&#24038;&#25805;&#20316;&#25968;&#30340;&#27714;&#20540;&#25353;&#39034;&#24207;&#26089;&#20110;&#21491;&#25805;&#20316;&#25968;&#12290;</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></span></span>&#26631;&#20934;&#24211;&#20013;&#65292;&#36825;&#20123;&#36816;&#31639;&#31526;&#20165;&#30001; <span class="t-lc"><a href="cpp-numeric-valarray.html">std::valarray</a></span> &#37325;&#36733;&#12290;</li>
<li>&#36887;&#21495;&#36816;&#31639;&#31526; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator,</span></span>&#12290;<span class="t-rev-inl t-until-cxx17"><span>&#19981;&#21516;&#20110;&#20869;&#24314;&#29256;&#26412;&#65292;&#37325;&#36733;&#29256;&#26412;&#19981;&#20250;&#20196;&#24038;&#25805;&#20316;&#25968;&#30340;&#27714;&#20540;&#25353;&#39034;&#24207;&#26089;&#20110;&#21491;&#25805;&#20316;&#25968;&#12290;</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></span></span>&#22240;&#20026;&#27492;&#36816;&#31639;&#31526;&#21487;&#33021;&#34987;&#37325;&#36733;&#65292;&#25152;&#20197;&#27867;&#22411;&#24211;&#37117;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp">a,<span class="kw4">void</span><span class="br0">(</span><span class="br0">)</span>,b</span></span> &#36825;&#31181;&#34920;&#36798;&#24335;&#21462;&#20195; <span class="t-c"><span class="mw-geshi cpp source-cpp">a,b</span></span>&#65292;&#20197;&#23545;&#29992;&#25143;&#23450;&#20041;&#31867;&#22411;&#30340;&#34920;&#36798;&#24335;&#25353;&#39034;&#24207;&#27714;&#20540;&#12290;boost &#24211;&#22312; <a rel="nofollow" class="external text" href="http://www.boost.org/doc/libs/release/libs/assign/doc/index.html#intro">boost.assign</a>&#12289;<a rel="nofollow" class="external text" href="https://github.com/boostorg/spirit/blob/develop/include/boost/spirit/home/qi/string/symbols.hpp#L317">boost.spirit</a> &#21450;&#20960;&#20010;&#20854;&#20182;&#24211;&#20013;&#20351;&#29992; <code>operator,</code>&#12290;&#25968;&#25454;&#24211;&#35775;&#38382;&#24211; <a rel="nofollow" class="external text" href="http://soci.sourceforge.net/doc.html">SOCI</a> &#20063;&#37325;&#36733;&#20102; <code>operator,</code>&#12290;</li>
<li>&#36890;&#36807;&#25104;&#21592;&#25351;&#38024;&#30340;&#25104;&#21592;&#35775;&#38382; <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy2">-</span><span class="sy1">&gt;</span><span class="sy2">*</span></span></span>&#12290;&#37325;&#36733;&#27492;&#36816;&#31639;&#31526;&#24182;&#27809;&#26377;&#29305;&#21035;&#32570;&#28857;&#65292;&#20294;&#23454;&#36341;&#20013;&#23569;&#26377;&#20351;&#29992;&#12290;&#26377;&#20154;&#25512;&#33616;&#36825;&#33021;&#20316;&#20026;<a rel="nofollow" class="external text" href="http://www.aristeia.com/Papers/DDJ_Oct_1999.pdf">&#26234;&#33021;&#25351;&#38024;&#25509;&#21475;</a>&#30340;&#19968;&#37096;&#20998;&#65292;&#19988;&#23454;&#38469;&#19978;&#22312; <a rel="nofollow" class="external text" href="http://www.boost.org/doc/libs/release/libs/phoenix/doc/html/phoenix/modules/operator.html#phoenix.modules.operator.member_pointer_operator">boost.phoenix</a> &#20013;&#30340; actor &#26377;&#23454;&#38469;&#29992;&#36884;&#12290;&#23427;&#22312;&#20687; <a rel="nofollow" class="external text" href="https://github.com/schlangster/cpp.react/blob/master/include/react/Signal.h#L557">cpp.react</a> &#36825;&#26679;&#30340; EDSL &#20013;&#26356;&#24120;&#35265;&#12290;</li>
</ul>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="kw1">class</span> Fraction
<span class="br0">{</span>
<span class="kw4">int</span> gcd<span class="br0">(</span><span class="kw4">int</span> a, <span class="kw4">int</span> b<span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> b <span class="sy1">==</span> <span class="nu0">0</span> <span class="sy4">?</span> a <span class="sy4">:</span> gcd<span class="br0">(</span>b, a <span class="sy2">%</span> b<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> n, d<span class="sy4">;</span>
<span class="kw1">public</span><span class="sy4">:</span>
Fraction<span class="br0">(</span><span class="kw4">int</span> n, <span class="kw4">int</span> d <span class="sy1">=</span> <span class="nu0">1</span><span class="br0">)</span> <span class="sy4">:</span> n<span class="br0">(</span>n<span class="sy2">/</span>gcd<span class="br0">(</span>n, d<span class="br0">)</span><span class="br0">)</span>, d<span class="br0">(</span>d<span class="sy2">/</span>gcd<span class="br0">(</span>n, d<span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="kw4">int</span> num<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="kw1">return</span> n<span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">int</span> den<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="kw1">return</span> d<span class="sy4">;</span> <span class="br0">}</span>
Fraction<span class="sy3">&amp;</span> operator<span class="sy2">*</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> Fraction<span class="sy3">&amp;</span> rhs<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw4">int</span> new_n <span class="sy1">=</span> n <span class="sy2">*</span> rhs.<span class="me1">n</span><span class="sy2">/</span>gcd<span class="br0">(</span>n <span class="sy2">*</span> rhs.<span class="me1">n</span>, d <span class="sy2">*</span> rhs.<span class="me1">d</span><span class="br0">)</span><span class="sy4">;</span>
d <span class="sy1">=</span> d <span class="sy2">*</span> rhs.<span class="me1">d</span><span class="sy2">/</span>gcd<span class="br0">(</span>n <span class="sy2">*</span> rhs.<span class="me1">n</span>, d <span class="sy2">*</span> rhs.<span class="me1">d</span><span class="br0">)</span><span class="sy4">;</span>
n <span class="sy1">=</span> new_n<span class="sy4">;</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> out, <span class="kw4">const</span> Fraction<span class="sy3">&amp;</span> f<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">return</span> out <span class="sy1">&lt;&lt;</span> f.<span class="me1">num</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;/&#39;</span> <span class="sy1">&lt;&lt;</span> f.<span class="me1">den</span><span class="br0">(</span><span class="br0">)</span> <span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> Fraction<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> Fraction<span class="sy3">&amp;</span> rhs<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">return</span> lhs.<span class="me1">num</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">==</span> rhs.<span class="me1">num</span><span class="br0">(</span><span class="br0">)</span> <span class="sy3">&amp;&amp;</span> lhs.<span class="me1">den</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">==</span> rhs.<span class="me1">den</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">bool</span> operator<span class="sy3">!</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> Fraction<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> Fraction<span class="sy3">&amp;</span> rhs<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">return</span> <span class="sy3">!</span><span class="br0">(</span>lhs <span class="sy1">==</span> rhs<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
Fraction operator<span class="sy2">*</span><span class="br0">(</span>Fraction lhs, <span class="kw4">const</span> Fraction<span class="sy3">&amp;</span> rhs<span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">return</span> lhs <span class="sy2">*</span><span class="sy1">=</span> rhs<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>
Fraction f1<span class="br0">(</span><span class="nu0">3</span>, <span class="nu0">8</span><span class="br0">)</span>, f2<span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">)</span>, f3<span class="br0">(</span><span class="nu0">10</span>, <span class="nu0">2</span><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> f1 <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; * &quot;</span> <span class="sy1">&lt;&lt;</span> f2 <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; = &quot;</span> <span class="sy1">&lt;&lt;</span> f1 <span class="sy2">*</span> f2 <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span>
<span class="sy1">&lt;&lt;</span> f2 <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; * &quot;</span> <span class="sy1">&lt;&lt;</span> f3 <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; = &quot;</span> <span class="sy1">&lt;&lt;</span> f2 <span class="sy2">*</span> f3 <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span>
<span class="sy1">&lt;&lt;</span> <span class="nu0">2</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; * &quot;</span> <span class="sy1">&lt;&lt;</span> f1 <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; = &quot;</span> <span class="sy1">&lt;&lt;</span> <span class="nu0">2</span> <span class="sy2">*</span> f1 <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">3/8 * 1/2 = 3/16
1/2 * 5/1 = 5/2
2 * 3/8 = 3/4</pre></div>
</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/issue1458">CWG 1458</a></td>
<td>C++11</td>
<td>&#23545;&#37325;&#36733;&#20102;&#21462;&#22336;&#36816;&#31639;&#31526;&#30340;&#19981;&#23436;&#25972;&#31867;&#22411;&#21462;&#22320;&#22336;&#26159;&#26410;&#23450;&#20041;&#34892;&#20026;</td>
<td>&#34892;&#20026;&#21482;&#26159;&#26410;&#25351;&#26126;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<ul>
<li><a href="cpp-language-operator_precedence.html">&#36816;&#31639;&#31526;&#20248;&#20808;&#32423;</a></li>
<li><a href="cpp-language-operator_alternative.html">&#20195;&#29992;&#36816;&#31639;&#31526;&#35821;&#27861;</a></li>
<li><a href="cpp-language-adl.html">&#23454;&#21442;&#20381;&#36182;&#26597;&#25214;</a></li>
</ul>
<table class="wikitable">
<tr style="text-align:center">
<th colspan="7">&#24120;&#35265;&#36816;&#31639;&#31526;</th>
</tr>
<tr style="text-align:center">
<td><a href="cpp-language-operator_assignment.html">&#36171;&#20540;</a></td>
<td><a href="cpp-language-operator_incdec.html">&#33258;&#22686;<br />
&#33258;&#20943;</a></td>
<td><a href="cpp-language-operator_arithmetic.html">&#31639;&#26415;</a></td>
<td><a href="cpp-language-operator_logical.html">&#36923;&#36753;</a></td>
<td><a href="cpp-language-operator_comparison.html">&#27604;&#36739;</a></td>
<td><a href="cpp-language-operator_member_access.html">&#25104;&#21592;&#35775;&#38382;</a></td>
<td><a href="cpp-language-operator_other.html">&#20854;&#20182;</a></td>
</tr>
<tr style="text-align:center">
<td>
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy1">=</span> b<br />
a <span class="sy2">+</span><span class="sy1">=</span> b<br />
a <span class="sy2">-</span><span class="sy1">=</span> b<br />
a <span class="sy2">*</span><span class="sy1">=</span> b<br />
a <span class="sy2">/</span><span class="sy1">=</span> b<br />
a <span class="sy2">%</span><span class="sy1">=</span> b<br />
a <span class="sy3">&amp;</span><span class="sy1">=</span> b<br />
a <span class="sy3">|</span><span class="sy1">=</span> b<br />
a <span class="sy3">^</span><span class="sy1">=</span> b<br />
a <span class="sy1">&lt;&lt;=</span> b<br />
a <span class="sy1">&gt;&gt;=</span> b</span></span></p>
</td>
<td>
<p><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">++</span>a<br />
<span class="sy2">--</span>a<br />
a<span class="sy2">++</span><br />
a<span class="sy2">--</span></span></span></p>
</td>
<td>
<p><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">+</span>a<br />
<span class="sy2">-</span>a<br />
a <span class="sy2">+</span> b<br />
a <span class="sy2">-</span> b<br />
a <span class="sy2">*</span> b<br />
a <span class="sy2">/</span> b<br />
a <span class="sy2">%</span> b<br />
~a<br />
a <span class="sy3">&amp;</span> b<br />
a <span class="sy3">|</span> b<br />
a <span class="sy3">^</span> b<br />
a <span class="sy1">&lt;&lt;</span> b<br />
a <span class="sy1">&gt;&gt;</span> b</span></span></p>
</td>
<td>
<p><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span>a<br />
a <span class="sy3">&amp;&amp;</span> b<br />
a <span class="sy3">||</span> b</span></span></p>
</td>
<td>
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy1">==</span> b<br />
a <span class="sy3">!</span><span class="sy1">=</span> b<br />
a <span class="sy1">&lt;</span> b<br />
a <span class="sy1">&gt;</span> b<br />
a <span class="sy1">&lt;=</span> b<br />
a <span class="sy1">&gt;=</span> b<br />
a <span class="sy1">&lt;=&gt;</span> b</span></span></p>
</td>
<td>
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">a<span class="br0">[</span>b<span class="br0">]</span><br />
<span class="sy2">*</span>a<br />
<span class="sy3">&amp;</span>a<br />
a<span class="sy2">-</span><span class="sy1">&gt;</span>b<br />
a.<span class="me1">b</span><br />
a<span class="sy2">-</span><span class="sy1">&gt;</span><span class="sy2">*</span>b<br />
a.<span class="sy2">*</span>b</span></span></p>
</td>
<td>
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">a<span class="br0">(</span>...<span class="br0">)</span><br />
a, b<br />
<span class="sy4">?</span> <span class="sy4">:</span></span></span></p>
</td>
</tr>
<tr>
<th colspan="7">&#29305;&#27530;&#36816;&#31639;&#31526;</th>
</tr>
<tr>
<td colspan="7">
<p><a href="cpp-language-static_cast.html"><tt>static_cast</tt></a> &#36716;&#25442;&#19968;&#20010;&#31867;&#22411;&#20026;&#21478;&#19968;&#30456;&#20851;&#31867;&#22411;<br />
<a href="cpp-language-dynamic_cast.html"><tt>dynamic_cast</tt></a> &#22312;&#32487;&#25215;&#23618;&#32423;&#20013;&#36716;&#25442;<br />
<a href="cpp-language-const_cast.html"><tt>const_cast</tt></a> &#28155;&#21152;&#25110;&#31227;&#38500; <a href="cpp-language-cv.html">cv</a> &#38480;&#23450;&#31526;<br />
<a href="cpp-language-reinterpret_cast.html"><tt>reinterpret_cast</tt></a> &#36716;&#25442;&#31867;&#22411;&#21040;&#26080;&#20851;&#31867;&#22411;<br />
<a href="cpp-language-explicit_cast.html">C &#39118;&#26684;&#36716;&#22411;</a> &#20197; <code>static_cast</code> &#12289; <code>const_cast</code> &#21450; <code>reinterpret_cast</code> &#30340;&#28151;&#21512;&#36716;&#25442;&#19968;&#20010;&#31867;&#22411;&#21040;&#21478;&#19968;&#31867;&#22411;<br />
<a href="cpp-language-new.html"><tt>new</tt></a> &#21019;&#24314;&#26377;&#21160;&#24577;&#23384;&#20648;&#26399;&#30340;&#23545;&#35937;<br />
<a href="cpp-language-delete.html"><tt>delete</tt></a> &#38144;&#27585;&#20808;&#21069;&#30001; new &#34920;&#36798;&#24335;&#21019;&#24314;&#30340;&#23545;&#35937;&#65292;&#24182;&#37322;&#25918;&#20854;&#25152;&#25317;&#26377;&#30340;&#20869;&#23384;&#21306;&#22495;<br />
<a href="cpp-language-sizeof.html"><tt>sizeof</tt></a> &#26597;&#35810;&#31867;&#22411;&#30340;&#22823;&#23567;<br />
<a href="cpp-language-sizeof....html"><tt>sizeof...</tt></a> &#26597;&#35810;<a href="cpp-language-parameter_pack.html">&#24418;&#21442;&#21253;</a>&#30340;&#22823;&#23567;<span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span><br />
<a href="cpp-language-typeid.html"><tt>typeid</tt></a> &#26597;&#35810;&#31867;&#22411;&#30340;&#31867;&#22411;&#20449;&#24687;<br />
<a href="cpp-language-noexcept.html"><tt>noexcept</tt></a> &#26597;&#35810;&#34920;&#36798;&#24335;&#26159;&#21542;&#33021;&#25243;&#20986;&#24322;&#24120;<span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span><br />
<a href="cpp-language-alignof.html"><tt>alignof</tt></a> &#26597;&#35810;&#31867;&#22411;&#30340;&#23545;&#40784;&#35201;&#27714;<span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></p>
</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E5.BC.95.E7.94.A8">&#24341;&#29992;</span></h3>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="cpp-language-operators.html#cite_ref-1">&uarr;</a></span> <span class="reference-text">StackOverflow C++ FAQ &#19978;&#30340;<a rel="nofollow" class="external text" href="http://stackoverflow.com/questions/4421706/operator-overloading/4421708#4421708">&#36816;&#31639;&#31526;&#37325;&#36733;</a></span></li>
</ol>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>