596 lines
50 KiB
HTML
596 lines
50 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>赋值运算符</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_assignment 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 = b</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="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
<td style="background: #ececec; color: grey; vertical-align: middle; text-align: center;" class="table-na"><small>N/A</small></td>
|
|
</tr>
|
|
<tr>
|
|
<td>加法赋值</td>
|
|
<td><code>a += b</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="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>减法赋值</td>
|
|
<td><code>a -= b</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="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>乘法赋值</td>
|
|
<td><code>a *= b</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="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>除法赋值</td>
|
|
<td><code>a /= b</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="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>取模赋值</td>
|
|
<td><code>a %= b</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="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>逐位与赋值</td>
|
|
<td><code>a &= b</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="sy3">&</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy3">&</span><span class="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>逐位或赋值</td>
|
|
<td><code>a |= b</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="sy3">|</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy3">|</span><span class="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>逐位异或赋值</td>
|
|
<td><code>a ^= b</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="sy3">^</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy3">^</span><span class="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>逐位左移赋值</td>
|
|
<td><code>a <<= b</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="sy1"><<=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy1"><<=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>逐位右移赋值</td>
|
|
<td><code>a >>= b</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="sy1">>>=</span><span class="br0">(</span><span class="kw4">const</span> T2<span class="sy3">&</span> b<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="sy1">>>=</span><span class="br0">(</span>T<span class="sy3">&</span> a, <span class="kw4">const</span> T2<span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<dl>
|
|
<dd><b>注意</b><br /></dd>
|
|
</dl>
|
|
<ul>
|
|
<li>所有内建赋值运算符都返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>this</span></span>,而大多数<a href="cpp-language-operators.html">用户定义重载</a>亦返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>this</span></span>,从而能以与内建版本相同的方式使用用户定义运算符。然而,用户定义运算符重载中,能以任何类型为返回类型(包括 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span></span></span>)。</li>
|
|
<li><code>T2</code> 可为包含 <code>T</code> 在内的任何类型</li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">解释</span></h3>
|
|
<p><i>复制赋值运算符</i>以 <code>b</code> 内容的副本替换对象 <code>a</code> 的内容(不修改 <code>b</code>)。对于类类型,这是一种特殊成员函数,描述于<a href="cpp-language-copy_assignment.html">复制赋值运算符</a>。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx11">
|
|
<td>
|
|
<p><i>移动赋值运算符</i>以 <code>b</code> 的内容替换对象 <code>a</code> 的内容,并尽可能避免复制(可以修改 <code>b</code>)。对于类类型,这是一种特殊成员函数,描述于<a href="cpp-language-move_assignment.html">移动赋值运算符</a>。 <span class="t-mark-rev t-since-cxx11">(C++11 起)</span></p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>对于非类类型,对复制与移动赋值不加以区分,均被称作<i>直接赋值(direct assignment)</i>。</p>
|
|
<p><i>复合赋值(compound assignment)</i>运算符以 <code>a</code> 的值和 <code>b</code> 的值间的二元运算结果替换对象 <code>a</code> 的内容。</p>
|
|
<h4><span class="mw-headline" id=".E5.86.85.E5.BB.BA.E7.9A.84.E7.9B.B4.E6.8E.A5.E8.B5.8B.E5.80.BC">内建的直接赋值</span></h4>
|
|
<p>直接赋值表达式的形式为</p>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">左操作数</span> <code><b>=</b></code> <span class="t-spar">右操作数</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><span class="t-spar">左操作数</span> <code><b>=</b></code> <code><b>{}</b></code></td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">左操作数</span> <code><b>=</b></code> <code><b>{</b></code> <span class="t-spar">右操作数</span> <code><b>}</b></code></td>
|
|
<td>(3)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<p>对于内建运算符,<span class="t-spar">左操作数</span> 可拥有任何非 const 标量类型,而 <span class="t-spar">右操作数</span> 必须可隐式转换为 <span class="t-spar">左操作数</span> 的类型。</p>
|
|
<p>直接赋值运算符期待以一个可修改左值为其左操作数,以一个右值表达式<span class="t-rev-inl t-since-cxx11"><span>或<i>花括号初始化器列表</i></span> <span><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></span></span>为其右操作数,并返回一个标识修改后的左操作数的左值。</p>
|
|
<p>对于非类类型,首先将右操作数<a href="cpp-language-implicit_conversion.html">隐式转换</a>为左操作数的无 cv 限定的类型,然后复制其值到左操作数所标识的对象中。</p>
|
|
<p>当左操作数拥有引用类型时,赋值运算符修改被引用的对象。</p>
|
|
<p>若左右操作数标识的对象之间有重叠,则行为未定义(除非二者严格重叠且类型相同)。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx11">
|
|
<td>
|
|
<p>当右运算数为<i>花括号初始化器列表 (brace-init-list)</i>时</p>
|
|
<ul>
|
|
<li>若表达式 <code>E1</code> 拥有标量类型,则</li>
|
|
</ul>
|
|
<dl>
|
|
<dd>
|
|
<ul>
|
|
<li>表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">E1 <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span></span></span> 等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp">E1 <span class="sy1">=</span> T<span class="br0">{</span><span class="br0">}</span></span></span>,其中 <code>T</code> 是 <code>E1</code> 的类型。</li>
|
|
<li>表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">E1 <span class="sy1">=</span> <span class="br0">{</span>E2<span class="br0">}</span></span></span> 等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp">E1 <span class="sy1">=</span> T<span class="br0">{</span>E2<span class="br0">}</span></span></span>,其中 <code>T</code> 是 <code>E1</code> 的类型。</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<ul>
|
|
<li>若表达式 <code>E1</code> 拥有类类型,则语法 <span class="t-c"><span class="mw-geshi cpp source-cpp">E1 <span class="sy1">=</span> <span class="br0">{</span>args...<span class="br0">}</span></span></span> 生成以<i>花括号初始化器列表</i>为实参对赋值运算符的一次调用,然后遵循<a href="cpp-language-overload_resolution.html">重载决议</a>规则选取适合的赋值运算符。需要注意的是,若以某个非类类型为实参的非模板赋值运算符可用,则它胜过 <code>E1 = {}</code> 中的复制/移动赋值,这是因为从 <code>{}</code> 到非类类型属于<a href="cpp-language-overload_resolution.html#.E5.88.97.E8.A1.A8.E5.88.9D.E5.A7.8B.E5.8C.96.E4.B8.AD.E7.9A.84.E9.9A.90.E5.BC.8F.E8.BD.AC.E6.8D.A2.E5.BA.8F.E5.88.97">恒等转换</a>,它优先于从 <code>{}</code> 到类类型的用户定义转换。</li>
|
|
</ul>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx20">
|
|
<td>
|
|
<p>以 volatile 限定的非类类型左值为内建直接赋值运算符的左操作数被弃用,除非该赋值表达式出现于<a href="cpp-language-expressions.html#.E4.B8.8D.E6.B1.82.E5.80.BC.E8.A1.A8.E8.BE.BE.E5.BC.8F">不求值语境</a>或是<a href="cpp-language-expressions.html#.E5.BC.83.E5.80.BC.E8.A1.A8.E8.BE.BE.E5.BC.8F">弃值表达式</a>。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<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>中,对于每个类型 <code>T</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">T<span class="sy2">*</span><span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span>T<span class="sy2">*</span><span class="sy3">&</span>, T<span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</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">T<span class="sy2">*</span><span class="kw4">volatile</span> <span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span>T<span class="sy2">*</span><span class="kw4">volatile</span> <span class="sy3">&</span>, T<span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</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>
|
|
<p>对于每个枚举或成员指针类型 <code>T</code>(可选地有 volatile 限定),下列函数签名参与重载决议:</p>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">T<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span>T<span class="sy3">&</span>, T <span class="br0">)</span><span class="sy4">;</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>
|
|
<p>对于每对 A1 和 A2,其中 A1 是算术类型(可选地有 volatile 限定)而 A2 是提升后的算术类型,下列函数签名参与重载决议:</p>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">A1<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span>A1<span class="sy3">&</span>, A2<span class="br0">)</span><span class="sy4">;</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>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</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 <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> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// 不是赋值</span>
|
|
n <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// 直接赋值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> n <span class="sy1"><<</span> <span class="st0">' '</span><span class="sy4">;</span>
|
|
n <span class="sy1">=</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// 零初始化,然后赋值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> n <span class="sy1"><<</span> <span class="st0">' '</span><span class="sy4">;</span>
|
|
n <span class="sy1">=</span> <span class="st0">'a'</span><span class="sy4">;</span> <span class="co1">// 整型提升,然后赋值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> n <span class="sy1"><<</span> <span class="st0">' '</span><span class="sy4">;</span>
|
|
n <span class="sy1">=</span> <span class="br0">{</span><span class="st0">'b'</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// 显式转型,然后赋值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> n <span class="sy1"><<</span> <span class="st0">' '</span><span class="sy4">;</span>
|
|
n <span class="sy1">=</span> <span class="nu16">1.0</span><span class="sy4">;</span> <span class="co1">// 浮点转换,然后赋值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> n <span class="sy1"><<</span> <span class="st0">' '</span><span class="sy4">;</span>
|
|
<span class="co1">// n = {1.0}; // 编译错误(窄化转换)</span>
|
|
|
|
<span class="kw4">int</span><span class="sy3">&</span> r <span class="sy1">=</span> n<span class="sy4">;</span> <span class="co1">// 不是赋值</span>
|
|
<span class="kw4">int</span><span class="sy2">*</span> p<span class="sy4">;</span>
|
|
|
|
r <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="co1">// 通过引用赋值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> n <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
p <span class="sy1">=</span> <span class="sy3">&</span>n<span class="sy4">;</span> <span class="co1">// 直接赋值</span>
|
|
p <span class="sy1">=</span> nullptr<span class="sy4">;</span> <span class="co1">// 空指针转换,然后赋值</span>
|
|
|
|
<span class="kw1">struct</span> <span class="br0">{</span><span class="kw4">int</span> a<span class="sy4">;</span> <a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> s<span class="sy4">;</span><span class="br0">}</span> obj<span class="sy4">;</span>
|
|
obj <span class="sy1">=</span> <span class="br0">{</span><span class="nu0">1</span>, <span class="st0">"abc"</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// 从花括号初始化器列表赋值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> obj.<span class="me1">a</span> <span class="sy1"><<</span> <span class="st0">':'</span> <span class="sy1"><<</span> obj.<span class="me1">s</span> <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">1 0 97 98 1 2
|
|
1:abc</pre></div>
|
|
</div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E5.86.85.E5.BB.BA.E7.9A.84.E5.A4.8D.E5.90.88.E8.B5.8B.E5.80.BC">内建的复合赋值</span></h4>
|
|
<p>复合赋值表达式的形式为</p>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">左操作数</span> <span class="t-spar">运算符</span> <span class="t-spar">右操作数</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><span class="t-spar">左操作数</span> <span class="t-spar">运算符</span> <code><b>{}</b></code></td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">左操作数</span> <span class="t-spar">运算符</span> <code><b>{</b></code> <span class="t-spar">右操作数</span> <code><b>}</b></code></td>
|
|
<td>(3)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</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">运算符</span></td>
|
|
<td>-</td>
|
|
<td><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="sy1"><<=</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="sy3">^</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> 之一</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td><span class="t-spar">左操作数</span></td>
|
|
<td>-</td>
|
|
<td>对于内建运算符,<span class="t-spar">左操作数</span> 可具有任何算术类型,但若 <span class="t-spar">运算符</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>,则也接受指针类型,并与 + 和 - 有相同限制</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td><span class="t-spar">右操作数</span></td>
|
|
<td>-</td>
|
|
<td>对于内建运算符,<span class="t-spar">右操作数</span> 必须可隐式转换为 <span class="t-spar">左操作数</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>每个内建复合赋值运算符表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">E1 op<span class="sy1">=</span> E2</span></span>(其中 E1 是可修改左值表达式,而 E2 是右值表达式<span class="t-rev-inl t-since-cxx11"><span>或<i>花括号初始化器列表</i></span> <span><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></span></span>)的行为与表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">E1 <span class="sy1">=</span> E1 op E2</span></span> 的行为严格相同,但只对表达式 <code>E1</code> 进行一次求值,并且对于顺序不确定的函数而言是一次单个操作(例如 <span class="t-c"><span class="mw-geshi cpp source-cpp">f<span class="br0">(</span>a <span class="sy2">+</span><span class="sy1">=</span> b, g<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span> 中,从 <span class="t-c"><span class="mw-geshi cpp source-cpp">g<span class="br0">(</span><span class="br0">)</span></span></span> 内来看,+= 要么完全未开始,要么已完成)。</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>
|
|
<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>中,对每对 A1 和 A2,其中 A1 是算术类型(可选地有 volatile 限定)而 A2 为提升后的算术类型,下列函数签名参与重载决议:</p>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">A1<span class="sy3">&</span> operator<span class="sy2">*</span><span class="sy1">=</span><span class="br0">(</span>A1<span class="sy3">&</span>, A2<span class="br0">)</span><span class="sy4">;</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">A1<span class="sy3">&</span> operator<span class="sy2">/</span><span class="sy1">=</span><span class="br0">(</span>A1<span class="sy3">&</span>, A2<span class="br0">)</span><span class="sy4">;</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">A1<span class="sy3">&</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span>A1<span class="sy3">&</span>, A2<span class="br0">)</span><span class="sy4">;</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">A1<span class="sy3">&</span> operator<span class="sy2">-</span><span class="sy1">=</span><span class="br0">(</span>A1<span class="sy3">&</span>, A2<span class="br0">)</span><span class="sy4">;</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>
|
|
<p>对于每对 I1 与 I2,其中 I1 是整型类型(可选地有 volatile 限定)而 I2 为提升后的整型类型,下列函数签名参与重载决议:</p>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp">I1<span class="sy3">&</span> operator<span class="sy2">%</span><span class="sy1">=</span><span class="br0">(</span>I1<span class="sy3">&</span>, I2<span class="br0">)</span><span class="sy4">;</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">I1<span class="sy3">&</span> operator<span class="sy1"><<=</span><span class="br0">(</span>I1<span class="sy3">&</span>, I2<span class="br0">)</span><span class="sy4">;</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">I1<span class="sy3">&</span> operator<span class="sy1">>>=</span><span class="br0">(</span>I1<span class="sy3">&</span>, I2<span class="br0">)</span><span class="sy4">;</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">I1<span class="sy3">&</span> operator<span class="sy3">&</span><span class="sy1">=</span><span class="br0">(</span>I1<span class="sy3">&</span>, I2<span class="br0">)</span><span class="sy4">;</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">I1<span class="sy3">&</span> operator<span class="sy3">^</span><span class="sy1">=</span><span class="br0">(</span>I1<span class="sy3">&</span>, I2<span class="br0">)</span><span class="sy4">;</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">I1<span class="sy3">&</span> operator<span class="sy3">|</span><span class="sy1">=</span><span class="br0">(</span>I1<span class="sy3">&</span>, I2<span class="br0">)</span><span class="sy4">;</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>
|
|
<p>对于每个可选地有 cv 限定的对象类型 <code>T</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">T<span class="sy2">*</span><span class="sy3">&</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span>T<span class="sy2">*</span><span class="sy3">&</span>, <a href="cpp-types-ptrdiff_t.html"><span class="kw101">std::<span class="me2">ptrdiff_t</span></span></a><span class="br0">)</span><span class="sy4">;</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">T<span class="sy2">*</span><span class="sy3">&</span> operator<span class="sy2">-</span><span class="sy1">=</span><span class="br0">(</span>T<span class="sy2">*</span><span class="sy3">&</span>, <a href="cpp-types-ptrdiff_t.html"><span class="kw101">std::<span class="me2">ptrdiff_t</span></span></a><span class="br0">)</span><span class="sy4">;</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">T<span class="sy2">*</span><span class="kw4">volatile</span> <span class="sy3">&</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span>T<span class="sy2">*</span><span class="kw4">volatile</span> <span class="sy3">&</span>, <a href="cpp-types-ptrdiff_t.html"><span class="kw101">std::<span class="me2">ptrdiff_t</span></span></a><span class="br0">)</span><span class="sy4">;</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">T<span class="sy2">*</span><span class="kw4">volatile</span> <span class="sy3">&</span> operator<span class="sy2">-</span><span class="sy1">=</span><span class="br0">(</span>T<span class="sy2">*</span><span class="kw4">volatile</span> <span class="sy3">&</span>, <a href="cpp-types-ptrdiff_t.html"><span class="kw101">std::<span class="me2">ptrdiff_t</span></span></a><span class="br0">)</span><span class="sy4">;</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>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B_2">示例</span></h3>
|
|
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
|
|
<tr>
|
|
<td class="mbox-empty-cell"></td>
|
|
<td class="mbox-text" style="">本节未完成<br />
|
|
原因:暂无示例</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><strong class="selflink">赋值</strong></td>
|
|
<td><a href="cpp-language-operator_incdec.html">自增<br />
|
|
自减</a></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>
|