320 lines
29 KiB
HTML
320 lines
29 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>C++ 運算元優先序</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_precedence skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">C++ 運算元優先序</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>下表列出 C++ 運算元的優先序和结合性。各个運算元以優先序的降序从上至下列出。</p>
|
|
<table class="wikitable">
|
|
<tr>
|
|
<th style="text-align: left">優先序</th>
|
|
<th style="text-align: left">運算元</th>
|
|
<th style="text-align: left">描述</th>
|
|
<th style="text-align: left">结合性</th>
|
|
</tr>
|
|
<tr>
|
|
<th>1</th>
|
|
<td><code>::</code></td>
|
|
<td><a href="cpp-language-identifiers.html#.E6.9C.89.E9.99.90.E5.AE.9A.E7.9A.84.E6.A0.87.E8.AF.86.E7.AC.A6">作用域解析</a></td>
|
|
<td style="vertical-align: top" rowspan="6">从左到右</td>
|
|
</tr>
|
|
<tr>
|
|
<th rowspan="5">2</th>
|
|
<td style="border-bottom-style: none"><code>a++</code> <code>a--</code></td>
|
|
<td style="border-bottom-style: none">后缀<a href="cpp-language-operator_incdec.html">自增与自减</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code><i>type</i>()</code> <code><i>type</i>{}</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-explicit_cast.html">函数风格转型</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>a()</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-operator_other.html#.E5.86.85.E5.BB.BA.E7.9A.84.E5.87.BD.E6.95.B0.E8.B0.83.E7.94.A8.E9.81.8B.E7.AE.97.E5.85.83">函数调用</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>a[]</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-operator_member_access.html#.E5.86.85.E5.BB.BA.E7.9A.84.E4.B8.8B.E6.A0.87.E9.81.8B.E7.AE.97.E5.85.83">下标</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>.</code> <code>-></code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-operator_member_access.html#.E5.86.85.E5.BB.BA.E7.9A.84.E6.88.90.E5.91.98.E8.AE.BF.E9.97.AE.E9.81.8B.E7.AE.97.E5.85.83">成员访问</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th rowspan="10">3</th>
|
|
<td style="border-bottom-style: none"><code>++a</code> <code>--a</code></td>
|
|
<td style="border-bottom-style: none">前缀<a href="cpp-language-operator_incdec.html">自增与自减</a></td>
|
|
<td style="vertical-align: top" rowspan="10">从右到左</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>+a</code> <code>-a</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none">一元<a href="cpp-language-operator_arithmetic.html#.E4.B8.80.E5.85.83.E7.AE.97.E6.9C.AF.E9.81.8B.E7.AE.97.E5.85.83">加与减</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>!</code> <code>~</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-operator_logical.html">逻辑非</a>和<a href="cpp-language-operator_arithmetic.html#.E6.8C.89.E4.BD.8D.E9.80.BB.E8.BE.91.E9.81.8B.E7.AE.97.E5.85.83">逐位非</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>(<i>type</i>)</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-explicit_cast.html">C 风格转型</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>*a</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-operator_member_access.html#.E5.86.85.E5.BB.BA.E7.9A.84.E9.97.B4.E6.8E.A5.E9.81.8B.E7.AE.97.E5.85.83">间接</a>(解引用)</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>&a</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-operator_member_access.html#.E5.86.85.E5.BB.BA.E7.9A.84.E5.8F.96.E5.9C.B0.E5.9D.80.E9.81.8B.E7.AE.97.E5.85.83">取址</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>sizeof</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-sizeof.html">取大小</a><sup id="cite_ref-1" class="reference"><a href="cpp-language-operator_precedence.html#cite_note-1">[注 1]</a></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>co_await</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none">await 表达式 <span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>new</code> <code>new[]</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-new.html">动态内存分配</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-top-style: none"><code>delete</code> <code>delete[]</code></td>
|
|
<td style="border-top-style: none"><a href="cpp-language-delete.html">动态内存分配</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>4</th>
|
|
<td><code>.*</code> <code>->*</code></td>
|
|
<td><a href="cpp-language-operator_member_access.html#.E5.86.85.E5.BB.BA.E7.9A.84.E6.88.90.E5.91.98.E6.8C.87.E9.92.88.E8.AE.BF.E9.97.AE.E9.81.8B.E7.AE.97.E5.85.83">成员指针</a></td>
|
|
<td style="vertical-align: top" rowspan="13">从左到右</td>
|
|
</tr>
|
|
<tr>
|
|
<th>5</th>
|
|
<td><code>a*b</code> <code>a/b</code> <code>a%b</code></td>
|
|
<td><a href="cpp-language-operator_arithmetic.html#.E4.B9.98.E6.B3.95.E6.80.A7.E9.81.8B.E7.AE.97.E5.85.83">乘法、除法与余数</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>6</th>
|
|
<td><code>a+b</code> <code>a-b</code></td>
|
|
<td><a href="cpp-language-operator_arithmetic.html#.E5.8A.A0.E6.B3.95.E6.80.A7.E9.81.8B.E7.AE.97.E5.85.83">加法与减法</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>7</th>
|
|
<td><code><<</code> <code>>></code></td>
|
|
<td>逐位<a href="cpp-language-operator_arithmetic.html#.E7.A7.BB.E4.BD.8D.E9.81.8B.E7.AE.97.E5.85.83">左移与右移</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>8</th>
|
|
<td><code><=></code></td>
|
|
<td><a href="cpp-language-operator_comparison.html#.E4.B8.89.E8.B7.AF.E6.AF.94.E8.BE.83">三路比较運算元</a><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<th rowspan="2">9</th>
|
|
<td style="border-bottom-style: none"><code><</code> <code><=</code></td>
|
|
<td style="border-bottom-style: none">分别为 < 与 ≤ 的<a href="cpp-language-operator_comparison.html">关系運算元</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-top-style: none"><code>></code> <code>>=</code></td>
|
|
<td style="border-top-style: none">分别为 > 与 ≥ 的<a href="cpp-language-operator_comparison.html">关系運算元</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>10</th>
|
|
<td><code>==</code> <code>!=</code></td>
|
|
<td>分别为 = 与 ≠ 的<a href="cpp-language-operator_comparison.html">相等性運算元</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>11</th>
|
|
<td><code>a&b</code></td>
|
|
<td><a href="cpp-language-operator_arithmetic.html#.E6.8C.89.E4.BD.8D.E9.80.BB.E8.BE.91.E9.81.8B.E7.AE.97.E5.85.83">逐位与</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>12</th>
|
|
<td><code>^</code></td>
|
|
<td><a href="cpp-language-operator_arithmetic.html#.E6.8C.89.E4.BD.8D.E9.80.BB.E8.BE.91.E9.81.8B.E7.AE.97.E5.85.83">逐位异或</a>(互斥或)</td>
|
|
</tr>
|
|
<tr>
|
|
<th>13</th>
|
|
<td><code>|</code></td>
|
|
<td><a href="cpp-language-operator_arithmetic.html#.E6.8C.89.E4.BD.8D.E9.80.BB.E8.BE.91.E9.81.8B.E7.AE.97.E5.85.83">逐位或</a>(可兼或)</td>
|
|
</tr>
|
|
<tr>
|
|
<th>14</th>
|
|
<td><code>&&</code></td>
|
|
<td><a href="cpp-language-operator_logical.html">逻辑与</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>15</th>
|
|
<td><code>||</code></td>
|
|
<td><a href="cpp-language-operator_logical.html">逻辑或</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th rowspan="8">16</th>
|
|
<td style="border-bottom-style: none"><code>a?b:c</code></td>
|
|
<td style="border-bottom-style: none"><a href="cpp-language-operator_other.html#.E6.9D.A1.E4.BB.B6.E9.81.8B.E7.AE.97.E5.85.83">三元条件</a><sup id="cite_ref-2" class="reference"><a href="cpp-language-operator_precedence.html#cite_note-2">[注 2]</a></sup></td>
|
|
<td style="vertical-align: top" rowspan="8">从右到左</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>throw</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-throw.html">throw 運算元</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>co_yield</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none">yield 表达式 <span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>=</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none"><a href="cpp-language-operator_assignment.html#.E5.86.85.E5.BB.BA.E7.9A.84.E7.9B.B4.E6.8E.A5.E8.B5.8B.E5.80.BC">直接赋值</a>(C++ 类默认提供)</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>+=</code> <code>-=</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none">以和及差<a href="cpp-language-operator_assignment.html#.E5.86.85.E5.BB.BA.E7.9A.84.E5.A4.8D.E5.90.88.E8.B5.8B.E5.80.BC">复合赋值</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code>*=</code> <code>/=</code> <code>%=</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none">以积、商及余数<a href="cpp-language-operator_assignment.html#.E5.86.85.E5.BB.BA.E7.9A.84.E5.A4.8D.E5.90.88.E8.B5.8B.E5.80.BC">复合赋值</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-bottom-style: none; border-top-style: none"><code><<=</code> <code>>>=</code></td>
|
|
<td style="border-bottom-style: none; border-top-style: none">以逐位左移及右移<a href="cpp-language-operator_assignment.html#.E5.86.85.E5.BB.BA.E7.9A.84.E5.A4.8D.E5.90.88.E8.B5.8B.E5.80.BC">复合赋值</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border-top-style: none"><code>&=</code> <code>^=</code> <code>|=</code></td>
|
|
<td style="border-top-style: none">以逐位与、异或及或<a href="cpp-language-operator_assignment.html#.E5.86.85.E5.BB.BA.E7.9A.84.E5.A4.8D.E5.90.88.E8.B5.8B.E5.80.BC">复合赋值</a></td>
|
|
</tr>
|
|
<tr>
|
|
<th>17</th>
|
|
<td><code>,</code></td>
|
|
<td><a href="cpp-language-operator_other.html#.E5.86.85.E5.BB.BA.E7.9A.84.E9.80.97.E5.8F.B7.E9.81.8B.E7.AE.97.E5.85.83">逗号</a></td>
|
|
<td>从左到右</td>
|
|
</tr>
|
|
</table>
|
|
<ol class="references">
|
|
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="cpp-language-operator_precedence.html#cite_ref-1">↑</a></span> <span class="reference-text"><code>sizeof</code> 的操作数不能是 C 风格转型:表达式 <code>sizeof (int) * p</code> 无歧义地解释成 <code>(sizeof(int)) * p</code> ,而非 <code>sizeof((int)*p)</code>。</span></li>
|
|
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="cpp-language-operator_precedence.html#cite_ref-2">↑</a></span> <span class="reference-text">条件運算元中部(<code><b>?</b></code> 与 <code><b>:</b></code> 之间)的表达式分析为如同其带有括号:忽略其相对于 <code>?:</code> 的優先序。</span></li>
|
|
</ol>
|
|
<p>分析表达式时,列于上面表中某行的運算元,将比列于低于它的行中拥有较低優先序的任何運算元,更紧密地与其实参相绑定(如同用了括号)。例如,表达式 <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"><<</span> a <span class="sy3">&</span> b</span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>p<span class="sy2">++</span></span></span> 会被分析为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> a<span class="br0">)</span> <span class="sy3">&</span> b</span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span><span class="br0">(</span>p<span class="sy2">++</span><span class="br0">)</span></span></span>,而非 <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"><<</span> <span class="br0">(</span>a <span class="sy3">&</span> b<span class="br0">)</span></span></span> 或 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span><span class="sy2">*</span>p<span class="br0">)</span><span class="sy2">++</span></span></span>。</p>
|
|
<p>拥有相同優先序的運算元以其结合性的方向与各参数绑定。例如表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy1">=</span> b <span class="sy1">=</span> c</span></span> 会被分析为 <span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy1">=</span> <span class="br0">(</span>b <span class="sy1">=</span> c<span class="br0">)</span></span></span> 而非 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span>a <span class="sy1">=</span> b<span class="br0">)</span> <span class="sy1">=</span> c</span></span>,因为赋值具有从右到左结合性,但 <span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy2">+</span> b <span class="sy2">-</span> c</span></span> 会被分析为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span>a <span class="sy2">+</span> b<span class="br0">)</span> <span class="sy2">-</span> c</span></span> 而非 <span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy2">+</span> <span class="br0">(</span>b <span class="sy2">-</span> c<span class="br0">)</span></span></span>,因为加法和减法具有从左到右结合性。</p>
|
|
<p>结合性规定对于一元運算元是冗余的,只为完备而给出:一元前缀運算元始终从右到左结合(<span class="t-c"><span class="mw-geshi cpp source-cpp">delete <span class="sy2">++*</span>p</span></span> 为 <span class="t-c"><span class="mw-geshi cpp source-cpp">delete<span class="br0">(</span><span class="sy2">++</span><span class="br0">(</span><span class="sy2">*</span>p<span class="br0">)</span><span class="br0">)</span></span></span>)而一元后缀運算元始终从左到右结合(<span class="t-c"><span class="mw-geshi cpp source-cpp">a<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span><span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="sy2">++</span></span></span> 为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span><span class="br0">(</span>a<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span><span class="br0">)</span><span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="br0">)</span><span class="sy2">++</span></span></span>)。要注意,结合性对成员访问運算元是有意义的,即使在它们与一元后缀運算元组合时也是如此:<span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">b</span><span class="sy2">++</span></span></span> 会被分析为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span>a.<span class="me1">b</span><span class="br0">)</span><span class="sy2">++</span></span></span> 而非 <span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="br0">(</span>b<span class="sy2">++</span><span class="br0">)</span></span></span>。</p>
|
|
<p>運算元優先序不受<a href="cpp-language-operators.html">運算元重载</a>影响。例如,<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"><<</span> a <span class="sy4">?</span> b <span class="sy4">:</span> c<span class="sy4">;</span></span></span> 会被分析为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> a<span class="br0">)</span> <span class="sy4">?</span> b <span class="sy4">:</span> c<span class="sy4">;</span></span></span>,因为算术左移的優先序高于条件運算元。</p>
|
|
<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>标准自身不指定優先序。它们是从文法导出的。</p>
|
|
<p>表中并未包括 <a href="cpp-language-const_cast.html"><code>const_cast</code></a>、<a href="cpp-language-static_cast.html"><code>static_cast</code></a>、<a href="cpp-language-dynamic_cast.html"><code>dynamic_cast</code></a>、<a href="cpp-language-reinterpret_cast.html"><code>reinterpret_cast</code></a>、<a href="cpp-language-typeid.html"><code>typeid</code></a>、<a href="cpp-language-sizeof....html"><code>sizeof...</code></a>、<a href="cpp-language-noexcept.html"><code>noexcept</code></a> 及 <a href="cpp-language-alignof.html"><code>alignof</code></a>,因为它们决不会有歧义。</p>
|
|
<p>一些運算元拥有<a href="cpp-language-operator_alternative.html">代用写法</a>(例如,<code>&&</code> 可为 <span class="t-c"><span class="mw-geshi cpp source-cpp">and</span></span>、<code>||</code> 可为 <span class="t-c"><span class="mw-geshi cpp source-cpp">or</span></span>、<code>!</code> 可为 <span class="t-c"><span class="mw-geshi cpp source-cpp">not</span></span> 等)。</p>
|
|
<p>C 中,三元条件運算元拥有高于赋值運算元的優先序。因此,表达式 <span class="t-c"><span class="mw-geshi cpp source-cpp">e <span class="sy1">=</span> a <span class="sy1"><</span> d <span class="sy4">?</span> a<span class="sy2">++</span> <span class="sy4">:</span> a <span class="sy1">=</span> d</span></span> 在 C++ 中剖析成 <span class="t-c"><span class="mw-geshi cpp source-cpp">e <span class="sy1">=</span> <span class="br0">(</span><span class="br0">(</span>a <span class="sy1"><</span> d<span class="br0">)</span> <span class="sy4">?</span> <span class="br0">(</span>a<span class="sy2">++</span><span class="br0">)</span> <span class="sy4">:</span> <span class="br0">(</span>a <span class="sy1">=</span> d<span class="br0">)</span><span class="br0">)</span></span></span>,但在 C 中会由于 C 的语法或语义制约而编译失败。细节见对应的 C 页面。</p>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<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><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>
|