506 lines
39 KiB
HTML
506 lines
39 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>自增/自减运算符</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_operator_incdec skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">自增/自减运算符</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <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>自增/自减运算符增加或减小对象的值。</p>
|
|
<table class="wikitable" style="font-size:85%;">
|
|
<tr>
|
|
<th rowspan="2">运算符名</th>
|
|
<th rowspan="2">语法</th>
|
|
<th rowspan="2"><a href="cpp-language-operators.html">可重载</a></th>
|
|
<th colspan="2">原型示例(对于类 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">class</span> T</span></span>)</th>
|
|
</tr>
|
|
<tr>
|
|
<th>类内定义</th>
|
|
<th>类外定义</th>
|
|
</tr>
|
|
<tr>
|
|
<td>前自增</td>
|
|
<td><code>++a</code></td>
|
|
<td style="background: #90ff90; color: black; vertical-align: middle; text-align: center;" class="table-yes">是</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T<span class="sy3">&</span> T<span class="sy4">::</span><span class="me2">operator</span><span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T<span class="sy3">&</span> operator<span class="sy2">++</span><span class="br0">(</span>T<span class="sy3">&</span> a<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>前自减</td>
|
|
<td><code>--a</code></td>
|
|
<td style="background: #90ff90; color: black; vertical-align: middle; text-align: center;" class="table-yes">是</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T<span class="sy3">&</span> T<span class="sy4">::</span><span class="me2">operator</span><span class="sy2">--</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T<span class="sy3">&</span> operator<span class="sy2">--</span><span class="br0">(</span>T<span class="sy3">&</span> a<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>后自增</td>
|
|
<td><code>a++</code></td>
|
|
<td style="background: #90ff90; color: black; vertical-align: middle; text-align: center;" class="table-yes">是</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T T<span class="sy4">::</span><span class="me2">operator</span><span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T operator<span class="sy2">++</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>后自减</td>
|
|
<td><code>a--</code></td>
|
|
<td style="background: #90ff90; color: black; vertical-align: middle; text-align: center;" class="table-yes">是</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T T<span class="sy4">::</span><span class="me2">operator</span><span class="sy2">--</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">T operator<span class="sy2">--</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<dl>
|
|
<dd><b>注解</b><br /></dd>
|
|
</dl>
|
|
<ul>
|
|
<li>内建运算符的前置版本返回<i>引用</i>而后置版本返回<i>值</i>,典型的<a href="cpp-language-operators.html">用户定义重载</a>也遵循该模式,从而使用户定义运算符可以与内建版本相同的方式使用。然而,用户定义重载中,能以任何类型为返回类型(包括 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span></span></span>)。</li>
|
|
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span> 形参是用于区别运算符的前置和后置版本的空设形参。调用用户定义的运算符时,该形参中传递的值始终为零,但通过函数调用记法调用这个运算符时可以更改它(例如 <span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">operator</span><span class="sy2">++</span><span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span></span></span> 或 <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy2">++</span><span class="br0">(</span>a, <span class="nu0">2</span><span class="br0">)</span></span></span>)。</li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">解释</span></h3>
|
|
<p><i>前自增</i> 与 <i>前自减</i> 运算符增加或减小对象的值,并返回到其结果的引用。</p>
|
|
<p><i>后自增</i> 与 <i>后自减</i> 创建对象的副本,增加或减小对象的值,并返回自增或自减前的副本。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx20">
|
|
<td>
|
|
<p>以 volatile 限定的非类类型左值为这些运算符的内建版本的操作数是被弃用的。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h4><span class="mw-headline" id=".E5.86.85.E5.BB.BA.E7.9A.84.E5.89.8D.E7.BD.AE.E8.BF.90.E7.AE.97.E7.AC.A6">内建的前置运算符</span></h4>
|
|
<p>前置自增与自减表达式的形式为</p>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td class="t-sdsc-nopad"><code><b>++</b></code> <span class="t-spar">表达式</span></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td class="t-sdsc-nopad"><code><b>--</b></code> <span class="t-spar">表达式</span></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> 前置自增(前自增)</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> 前置自减(前自减)</div>
|
|
<p>内建前置自增或自减运算符的操作数 <span class="t-spar">表达式</span> 必须是<span class="t-rev-inl t-since-cxx17"><span>非布尔的</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 起)</span></span></span>算术类型或指向完整定义的<a href="cpp-language-type.html">对象类型</a>的指针类型的可修改(非 const)<a href="cpp-language-value_category.html">左值</a>。表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">++</span>x</span></span> <span class="t-rev-inl t-until-cxx17"><span>对于非布尔操作数</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></span></span>严格等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp">x <span class="sy2">+</span><span class="sy1">=</span> <span class="nu0">1</span></span></span>,而表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">--</span>x</span></span> 严格等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp">x <span class="sy2">-</span><span class="sy1">=</span> <span class="nu0">1</span></span></span>,即前置自增与自减是标识修改后的操作数的左值表达式。所有针对<a href="cpp-language-operator_arithmetic.html">算术运算符</a>定义的算术转换规则和指针算术规则都适用,并由此确定应用到操作数的隐式转换(若存在)以及表达式的返回类型。</p>
|
|
<p><span class="t-rev-inl t-until-cxx17"><span>若前自增运算符的运算数为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> 类型,则它被设为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> <span class="t-mark">(弃用)</span>。</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></span></span></p>
|
|
<p>在<a href="cpp-language-overload_resolution.html#.E8.B0.83.E7.94.A8.E9.87.8D.E8.BD.BD.E8.BF.90.E7.AE.97.E7.AC.A6">针对用户定义运算符的重载决议</a>中,对于每个 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> 以外的可选地有 volatile 限定的算术类型 <code>A</code>,和对于每个可选地有 volatile 限定的指向可选地有 cv 限定的对象类型的指针 <code>P</code>,下列函数签名参与重载决议:</p>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">A<span class="sy3">&</span> operator<span class="sy2">++</span><span class="br0">(</span>A<span class="sy3">&</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span><span class="sy3">&</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">bool</span><span class="sy3">&</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td><span class="t-mark">(弃用)</span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">P<span class="sy3">&</span> operator<span class="sy2">++</span><span class="br0">(</span>P<span class="sy3">&</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">A<span class="sy3">&</span> operator<span class="sy2">--</span><span class="br0">(</span>A<span class="sy3">&</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">P<span class="sy3">&</span> operator<span class="sy2">--</span><span class="br0">(</span>P<span class="sy3">&</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4><span class="mw-headline" id=".E5.86.85.E5.BB.BA.E7.9A.84.E5.90.8E.E7.BD.AE.E8.BF.90.E7.AE.97.E7.AC.A6">内建的后置运算符</span></h4>
|
|
<p>后置自增与自减表达式拥有形式</p>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td class="t-sdsc-nopad"><span class="t-spar">表达式</span> <code><b>++</b></code></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td class="t-sdsc-nopad"><span class="t-spar">表达式</span> <code><b>--</b></code></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> 后置自增(后自增)</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> 后置自减(后自减)</div>
|
|
<p>内建后置自增或自减运算符的操作数 <span class="t-spar">表达式</span> 必须是<span class="t-rev-inl t-since-cxx17"><span>非布尔的</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 起)</span></span></span>算术类型或指向完整定义的<a href="cpp-language-type.html">对象类型</a>的指针类型的可修改(非 const)<a href="cpp-language-value_category.html">左值</a>。结果是操作数原值的<a href="cpp-language-value_category.html">纯右值</a>副本。作为副作用,表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">x<span class="sy2">++</span></span></span> <span class="t-rev-inl t-until-cxx17"><span>对于非布尔操作数</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></span></span>如同 <span class="t-c"><span class="mw-geshi cpp source-cpp">x <span class="sy2">+</span><span class="sy1">=</span> <span class="nu0">1</span></span></span> 一般修改其操作数的值,而表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">x<span class="sy2">--</span></span></span> 如同 <span class="t-c"><span class="mw-geshi cpp source-cpp">x <span class="sy2">-</span><span class="sy1">=</span> <span class="nu0">1</span></span></span> 一般修改其操作数的值。所有为<a href="cpp-language-operator_arithmetic.html">算术运算符</a>定义的算术转换规则和指针算术规则都适用,并由此确定应用到操作数的隐式转换(若存在)以及表达式的返回类型。</p>
|
|
<p><span class="t-rev-inl t-until-cxx17"><span>若后自增运算符的操作数为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> 类型,则它被设为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> <span class="t-mark">(弃用)</span>。</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></span></span></p>
|
|
<p>在<a href="cpp-language-overload_resolution.html#.E8.B0.83.E7.94.A8.E9.87.8D.E8.BD.BD.E8.BF.90.E7.AE.97.E7.AC.A6">针对用户定义运算符的重载决议</a>中,对于每个 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span></span></span> 以外的可选地有 volatile 限定的算术类型 <code>A</code>,和对于每个可选地有 volatile 限定的指向可选地有 cv 限定的对象类型的指针 <code>P</code>,下列函数签名参与重载决议:</p>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">A operator<span class="sy2">++</span><span class="br0">(</span>A<span class="sy3">&</span>, <span class="kw4">int</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw4">bool</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">bool</span><span class="sy3">&</span>, <span class="kw4">int</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td><span class="t-mark">(弃用)</span><span class="t-mark-rev t-until-cxx17">(C++17 前)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">P operator<span class="sy2">++</span><span class="br0">(</span>P<span class="sy3">&</span>, <span class="kw4">int</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">A operator<span class="sy2">--</span><span class="br0">(</span>A<span class="sy3">&</span>, <span class="kw4">int</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">P operator<span class="sy2">--</span><span class="br0">(</span>P<span class="sy3">&</span>, <span class="kw4">int</span><span class="br0">)</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h4>
|
|
<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 <iostream></span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="kw4">int</span> n1 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">int</span> n2 <span class="sy1">=</span> <span class="sy2">++</span>n1<span class="sy4">;</span>
|
|
<span class="kw4">int</span> n3 <span class="sy1">=</span> <span class="sy2">++</span> <span class="sy2">++</span>n1<span class="sy4">;</span>
|
|
<span class="kw4">int</span> n4 <span class="sy1">=</span> n1<span class="sy2">++</span><span class="sy4">;</span>
|
|
<span class="co1">// int n5 = n1++ ++; // 错误</span>
|
|
<span class="co1">// int n6 = n1 + ++n1; // 未定义行为</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"n1 = "</span> <span class="sy1"><<</span> n1 <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span>
|
|
<span class="sy1"><<</span> <span class="st0">"n2 = "</span> <span class="sy1"><<</span> n2 <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span>
|
|
<span class="sy1"><<</span> <span class="st0">"n3 = "</span> <span class="sy1"><<</span> n3 <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span>
|
|
<span class="sy1"><<</span> <span class="st0">"n4 = "</span> <span class="sy1"><<</span> n4 <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">n1 = 5
|
|
n2 = 2
|
|
n3 = 4
|
|
n4 = 4</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>因为涉及到了副作用,所以必须谨慎使用内建的自增和自减运算符,以避免违背<a href="cpp-language-eval_order.html">定序规则</a>所致的未定义行为。</p>
|
|
<p>由于后自增和后自减期间会构造对象的临时副本,故在不使用返回值的语境中<i>前自增</i>或<i>前自减</i>运算符通常更有效率。</p>
|
|
<h3><span class="mw-headline" id=".E6.A0.87.E5.87.86.E5.BA.93">标准库</span></h3>
|
|
<p>自增和自减运算符对许多标准库类型重载。特别是每个<a href="cpp-named_req-Iterator.html"><span style="font-style:italic">老式迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyIterator)</span></a> 都重载了 operator++,而且每个<a href="cpp-named_req-BidirectionalIterator.html"><span style="font-style:italic">老式双向迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyBidirectionalIterator)</span></a> 都重载了 operator--,即便这些运算符对于某些特定迭代器是无操作的。</p>
|
|
<table class="t-dsc-begin">
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.AF.B9.E7.AE.97.E6.9C.AF.E7.B1.BB.E5.9E.8B.E7.9A.84.E9.87.8D.E8.BD.BD">对算术类型的重载</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-atomic-atomic-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span><span>operator--</span><span>operator--<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>令原子值增加或减少一<br />
|
|
<span class="t-mark">(<code>std::atomic<T></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-duration-operator_arith2.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span><span>operator--</span><span>operator--<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>递增或递减滴答计数<br />
|
|
<span class="t-mark">(<code>std::chrono::duration<Rep,Period></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.AF.B9.E8.BF.AD.E4.BB.A3.E5.99.A8.E7.B1.BB.E5.9E.8B.E7.9A.84.E9.87.8D.E8.BD.BD">对迭代器类型的重载</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-memory-raw_storage_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>推进迭代器<br />
|
|
<span class="t-mark">(<code>std::raw_storage_iterator<OutputIt,T></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-reverse_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span><span>operator+=</span><span>operator+</span><span>operator--</span><span>operator--<span class="t-dsc-small">(int)</span></span><span>operator-=</span><span>operator-</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>推进或回退迭代器<br />
|
|
<span class="t-mark">(<code>std::reverse_iterator<Iter></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-move_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span><span>operator+=</span><span>operator+</span><span>operator--</span><span>operator--<span class="t-dsc-small">(int)</span></span><span>operator-=</span><span>operator-</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>推进或回退迭代器<br />
|
|
<span class="t-mark">(<code>std::move_iterator<Iter></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-front_insert_iterator-operator++.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>无操作<br />
|
|
<span class="t-mark">(<code>std::front_insert_iterator<Container></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-back_insert_iterator-operator++.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>无操作<br />
|
|
<span class="t-mark">(<code>std::back_insert_iterator<Container></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-insert_iterator-operator++.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>无操作<br />
|
|
<span class="t-mark">(<code>std::insert_iterator<Container></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-istream_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>推进迭代器<br />
|
|
<span class="t-mark">(<code>std::istream_iterator<T,CharT,Traits,Distance></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-ostream_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>无操作<br />
|
|
<span class="t-mark">(<code>std::ostream_iterator<T,CharT,Traits></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-istreambuf_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>推进迭代器<br />
|
|
<span class="t-mark">(<code>std::istreambuf_iterator<CharT,Traits></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-iterator-ostreambuf_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>无操作<br />
|
|
<span class="t-mark">(<code>std::ostreambuf_iterator<CharT,Traits></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-regex-regex_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>推进迭代器到下一个匹配<br />
|
|
<span class="t-mark">(<code>std::regex_iterator<BidirIt,CharT,Traits></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-regex-regex_token_iterator-operator_arith.html"><span class="t-lines"><span>operator++</span><span>operator++<span class="t-dsc-small">(int)</span></span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>推进迭代器到下一个子匹配<br />
|
|
<span class="t-mark">(<code>std::regex_token_iterator<BidirIt,CharT,Traits></code> 的公开成员函数)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<p><a href="cpp-language-operator_precedence.html">运算符优先级</a></p>
|
|
<p><a href="cpp-language-operators.html">运算符重载</a></p>
|
|
<table class="wikitable">
|
|
<tr style="text-align:center">
|
|
<th colspan="7">常见运算符</th>
|
|
</tr>
|
|
<tr style="text-align:center">
|
|
<td><a href="cpp-language-operator_assignment.html">赋值</a></td>
|
|
<td><strong class="selflink">自增<br />
|
|
自减</strong></td>
|
|
<td><a href="cpp-language-operator_arithmetic.html">算术</a></td>
|
|
<td><a href="cpp-language-operator_logical.html">逻辑</a></td>
|
|
<td><a href="cpp-language-operator_comparison.html">比较</a></td>
|
|
<td><a href="cpp-language-operator_member_access.html">成员访问</a></td>
|
|
<td><a href="cpp-language-operator_other.html">其他</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">&</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"><<=</span> b<br />
|
|
a <span class="sy1">>>=</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">&</span> b<br />
|
|
a <span class="sy3">|</span> b<br />
|
|
a <span class="sy3">^</span> b<br />
|
|
a <span class="sy1"><<</span> b<br />
|
|
a <span class="sy1">>></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">&&</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"><</span> b<br />
|
|
a <span class="sy1">></span> b<br />
|
|
a <span class="sy1"><=</span> b<br />
|
|
a <span class="sy1">>=</span> b<br />
|
|
a <span class="sy1"><=></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">&</span>a<br />
|
|
a<span class="sy2">-</span><span class="sy1">></span>b<br />
|
|
a.<span class="me1">b</span><br />
|
|
a<span class="sy2">-</span><span class="sy1">></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">特殊运算符</th>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="7">
|
|
<p><a href="cpp-language-static_cast.html"><tt>static_cast</tt></a> 转换一个类型为另一相关类型<br />
|
|
<a href="cpp-language-dynamic_cast.html"><tt>dynamic_cast</tt></a> 在继承层级中转换<br />
|
|
<a href="cpp-language-const_cast.html"><tt>const_cast</tt></a> 添加或移除 <a href="cpp-language-cv.html">cv</a> 限定符<br />
|
|
<a href="cpp-language-reinterpret_cast.html"><tt>reinterpret_cast</tt></a> 转换类型到无关类型<br />
|
|
<a href="cpp-language-explicit_cast.html">C 风格转型</a> 以 <code>static_cast</code> 、 <code>const_cast</code> 及 <code>reinterpret_cast</code> 的混合转换一个类型到另一类型<br />
|
|
<a href="cpp-language-new.html"><tt>new</tt></a> 创建有动态存储期的对象<br />
|
|
<a href="cpp-language-delete.html"><tt>delete</tt></a> 销毁先前由 new 表达式创建的对象,并释放其所拥有的内存区域<br />
|
|
<a href="cpp-language-sizeof.html"><tt>sizeof</tt></a> 查询类型的大小<br />
|
|
<a href="cpp-language-sizeof....html"><tt>sizeof...</tt></a> 查询<a href="cpp-language-parameter_pack.html">形参包</a>的大小<span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
|
<a href="cpp-language-typeid.html"><tt>typeid</tt></a> 查询类型的类型信息<br />
|
|
<a href="cpp-language-noexcept.html"><tt>noexcept</tt></a> 查询表达式是否能抛出异常<span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
|
<a href="cpp-language-alignof.html"><tt>alignof</tt></a> 查询类型的对齐要求<span class="t-mark-rev t-since-cxx11">(C++11 起)</span></p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table class="t-dsc-begin"></table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|