405 lines
28 KiB
HTML
405 lines
28 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_statements 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>语句(statement)是依序执行的 C++ 程序片段。任何函数体都是语句的序列。例如:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><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">1</span><span class="sy4">;</span> <span class="co1">// 声明语句</span>
|
|
n <span class="sy1">=</span> n <span class="sy2">+</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> <span class="st0">"n = "</span> <span class="sy1"><<</span> n <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span> <span class="co1">// 表达式语句</span>
|
|
<span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// return 语句</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>C++ 包含下列类型的语句:</p>
|
|
<div class="t-li1"><span class="t-li">1)</span> 表达式语句(expression statement);</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> 复合语句(compound statement);</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> 选择语句(selection statement);</div>
|
|
<div class="t-li1"><span class="t-li">4)</span> 循环语句(iteration statement);</div>
|
|
<div class="t-li1"><span class="t-li">5)</span> 跳转语句(jump statement);</div>
|
|
<div class="t-li1"><span class="t-li">6)</span> 声明语句(declaration statement);</div>
|
|
<div class="t-li1"><span class="t-li">7)</span> try 块;</div>
|
|
<div class="t-li1"><span class="t-li">8)</span> atomic 与 synchronized 块<span class="t-mark-rev t-since-tm-ts t-mark-ts">(TM TS)</span>。</div>
|
|
<h3><span class="mw-headline" id=".E6.A0.87.E7.AD.BE">标签</span></h3>
|
|
<p>通过在语句自身之前提供后随冒号的标签,任何语句都可<i>带有标签</i>。</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-mark">(可选)</span> <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><span class="t-mark">(可选)</span> <code><b>case</b></code> <span class="t-spar">常量表达式</span> <code><b>:</b></code> <span class="t-spar">语句</span></td>
|
|
<td>(2)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">属性</span><span class="t-mark">(可选)</span> <code><b>default</b></code> <code><b>:</b></code> <span class="t-spar">语句</span></td>
|
|
<td>(3)</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> <a href="cpp-language-goto.html">goto</a> 的目标;</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> <a href="cpp-language-switch.html">switch</a> 语句中的 case 标签;</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> <a href="cpp-language-switch.html">switch</a> 语句中的 default 标签。</div>
|
|
<p>一条语句可以带有多个标签。</p>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-cxx11">
|
|
<td>
|
|
<p><a href="cpp-language-attributes.html">属性</a>序列 <span class="t-spar">属性</span> 可以紧接标签之前出现(这种情况下它应用到标签),或紧跟在语句自身之后出现,这种情况下它应用到整条语句。</p>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p>声明于函数内并带标识符的标签(且仅有标签)在该函数内、所有内嵌块、其自身声明的前后每处都在作用域内。</p>
|
|
<p>一个函数中的两个标签不得拥有同一标识符。</p>
|
|
<p><a href="cpp-language-unqualified_lookup.html">无限定查找</a>找不到标签:标签能与程序中任何其他实体拥有相同的名字。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="br0">{</span>
|
|
<span class="kw1">goto</span> label<span class="sy4">;</span> <span class="co1">// label 在作用域内,尽管它在后面才声明</span>
|
|
label<span class="sy4">:;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">goto</span> label<span class="sy4">;</span> <span class="co1">// label 忽略块作用域</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw4">void</span> g<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="kw1">goto</span> label<span class="sy4">;</span> <span class="co1">// 错误: label 不在 g() 的作用域内</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E8.A1.A8.E8.BE.BE.E5.BC.8F.E8.AF.AD.E5.8F.A5">表达式语句</span></h3>
|
|
<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-mark">(可选)</span> <span class="t-spar">表达式</span><span class="t-mark">(可选)</span> <code><b>;</b></code></td>
|
|
<td>(1)</td>
|
|
<td class="t-sdsc-nopad"></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-mark-rev t-since-cxx11">(C++11 起)</span> 可选的任意数量<a href="cpp-language-attributes.html">属性</a>的序列</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td><span class="t-spar">表达式</span></td>
|
|
<td>-</td>
|
|
<td>一个<a href="cpp-language-expressions.html">表达式</a></td>
|
|
</tr>
|
|
</table>
|
|
<p>典型 C++ 程序的大部分语句都是表达式语句,例如赋值和函数调用。</p>
|
|
<p>没有表达式的表达式语句被称作<i>空语句(null statement)</i>。它通常用来为 <a href="cpp-language-for.html">for</a> 或 <a href="cpp-language-while.html">while</a> 循环提供空体。它也可用于在复合语句的末尾引入标签。</p>
|
|
<h3><span class="mw-headline" id=".E5.A4.8D.E5.90.88.E8.AF.AD.E5.8F.A5">复合语句</span></h3>
|
|
<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-mark">(可选)</span> <code><b>{</b></code> <span class="t-spar">语句...</span><span class="t-mark">(可选)</span> <code><b>}</b></code></td>
|
|
<td>(1)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<p>当需要一条语句,但要按顺序执行多条语句时(例如在 <a href="cpp-language-if.html">if</a> 语句或循环中),可以使用复合语句:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">if</span> <span class="br0">(</span>x <span class="sy1">></span> <span class="nu0">5</span><span class="br0">)</span> <span class="co1">// if 语句的开始</span>
|
|
<span class="br0">{</span> <span class="co1">// 块的开始</span>
|
|
<span class="kw4">int</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="sy4">;</span> <span class="co1">// 表达式语句</span>
|
|
<span class="br0">}</span> <span class="co1">// 块的结束,if 语句的结束</span></pre></div>
|
|
</div>
|
|
<p>每个复合语句都引入其自身的块<a href="cpp-language-scope.html">作用域</a>;在块中声明的变量在闭花括号处以逆序销毁:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="br0">{</span> <span class="co1">// 块的开始</span>
|
|
<a href="cpp-io-basic_ofstream.html"><span class="kw1733">std::<span class="me2">ofstream</span></span></a> f<span class="br0">(</span><span class="st0">"test.txt"</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 声明语句</span>
|
|
f <span class="sy1"><<</span> <span class="st0">"abc<span class="es1">\n</span>"</span><span class="sy4">;</span> <span class="co1">// 表达式语句</span>
|
|
<span class="br0">}</span> <span class="co1">// 块结束,刷新并关闭 f</span>
|
|
<a href="cpp-io-basic_ifstream.html"><span class="kw1732">std::<span class="me2">ifstream</span></span></a> f<span class="br0">(</span><span class="st0">"test.txt"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> str<span class="sy4">;</span>
|
|
f <span class="sy1">>></span> str<span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E9.80.89.E6.8B.A9.E8.AF.AD.E5.8F.A5">选择语句</span></h3>
|
|
<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-mark">(可选)</span> <code><b>if</b></code> <code><b>constexpr</b></code><span class="t-mark">(可选)</span> <code><b>(</b></code> <span class="t-spar">初始化语句</span><span class="t-mark">(可选)</span> <span class="t-spar">条件</span> <code><b>)</b></code> <span class="t-spar">true分支语句</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-mark">(可选)</span> <code><b>if</b></code> <code><b>constexpr</b></code><span class="t-mark">(可选)</span> <code><b>(</b></code> <span class="t-spar">初始化语句</span><span class="t-mark">(可选)</span> <span class="t-spar">条件</span> <code><b>)</b></code> <span class="t-spar">true分支语句</span> <code><b>else</b></code> <span class="t-spar">false分支语句</span></td>
|
|
<td>(2)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">属性</span><span class="t-mark">(可选)</span> <code><b>switch</b></code> <code><b>(</b></code> <span class="t-spar">初始化语句</span><span class="t-mark">(可选)</span> <span class="t-spar">条件</span> <code><b>)</b></code> <span class="t-spar">语句</span></td>
|
|
<td>(3)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">属性</span><span class="t-mark">(可选)</span> <code><b>if</b></code> <code><b>!</b></code><span class="t-mark">(可选)</span> <code><b>consteval</b></code> <span class="t-spar">复合语句</span></td>
|
|
<td>(4)</td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23 起)</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-mark">(可选)</span> <code><b>if</b></code> <code><b>!</b></code><span class="t-mark">(可选)</span> <code><b>consteval</b></code> <span class="t-spar">复合语句</span> <code><b>else</b></code> <span class="t-spar">语句</span></td>
|
|
<td>(5)</td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23 起)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> <a href="cpp-language-if.html">if</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> 带 else 子句的 <a href="cpp-language-if.html">if</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> <a href="cpp-language-switch.html">switch</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">4)</span> <a href="cpp-language-if.html#consteval_if">consteval if</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">5)</span> 带 else 子句的 <a href="cpp-language-if.html#consteval_if">consteval if</a> 语句。</div>
|
|
<h3><span class="mw-headline" id=".E5.BE.AA.E7.8E.AF.E8.AF.AD.E5.8F.A5">循环语句</span></h3>
|
|
<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-mark">(可选)</span> <code><b>while</b></code> <code><b>(</b></code> <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><span class="t-mark">(可选)</span> <code><b>do</b></code> <span class="t-spar">语句</span> <code><b>while</b></code> <code><b>(</b></code> <span class="t-spar">表达式</span> <code><b>)</b></code> <code><b>;</b></code></td>
|
|
<td>(2)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">属性</span><span class="t-mark">(可选)</span> <code><b>for</b></code> <code><b>(</b></code> <span class="t-spar">初始化语句</span> <span class="t-spar">条件</span><span class="t-mark">(可选)</span> <code><b>;</b></code> <span class="t-spar">表达式</span><span class="t-mark">(可选)</span> <code><b>)</b></code> <span class="t-spar">语句</span></td>
|
|
<td>(3)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">属性</span><span class="t-mark">(可选)</span> <code><b>for</b></code> <code><b>(</b></code> <span class="t-spar">for-范围声明</span> <code><b>:</b></code> <span class="t-spar">for-范围初始化器</span> <code><b>)</b></code> <span class="t-spar">语句</span></td>
|
|
<td>(4)</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>
|
|
<div class="t-li1"><span class="t-li">1)</span> <a href="cpp-language-while.html">while</a> 循环;</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> <a href="cpp-language-do.html">do-while</a> 循环;</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> <a href="cpp-language-for.html">for</a> 循环;</div>
|
|
<div class="t-li1"><span class="t-li">4)</span> <a href="cpp-language-range-for.html">范围 for</a> 循环。</div>
|
|
<h3><span class="mw-headline" id=".E8.B7.B3.E8.BD.AC.E8.AF.AD.E5.8F.A5">跳转语句</span></h3>
|
|
<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-mark">(可选)</span> <code><b>break</b></code> <code><b>;</b></code></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-mark">(可选)</span> <code><b>continue</b></code> <code><b>;</b></code></td>
|
|
<td>(2)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">属性</span><span class="t-mark">(可选)</span> <code><b>return</b></code> <span class="t-spar">表达式</span><span class="t-mark">(可选)</span> <code><b>;</b></code></td>
|
|
<td>(3)</td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><span class="t-spar">属性</span><span class="t-mark">(可选)</span> <code><b>return</b></code> <span class="t-spar">花括号初始化器列表</span> <code><b>;</b></code></td>
|
|
<td>(4)</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-mark">(可选)</span> <code><b>goto</b></code> <span class="t-spar">标识符</span> <code><b>;</b></code></td>
|
|
<td>(5)</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> <a href="cpp-language-break.html">break</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> <a href="cpp-language-continue.html">continue</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> 可带表达式的 <a href="cpp-language-return.html">return</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">4)</span> 使用<a href="cpp-language-list_initialization.html">列表初始化</a>的 <a href="cpp-language-return.html">return</a> 语句;</div>
|
|
<div class="t-li1"><span class="t-li">5)</span> <a href="cpp-language-goto.html">goto</a> 语句。</div>
|
|
<p>注意:对于所有跳转语句,转移出循环、出块或回到被初始化且具有自动存储期的变量之前,会牵涉到对“ 转移发起点在作用域中而目标点不在,且具有自动存储期 ”的对象的销毁。如果有多个对象被初始化,那么销毁顺序与初始化顺序相反。</p>
|
|
<h3><span class="mw-headline" id=".E5.A3.B0.E6.98.8E.E8.AF.AD.E5.8F.A5">声明语句</span></h3>
|
|
<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></td>
|
|
<td>(1)</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> 细节见<a href="cpp-language-declarations.html">声明</a>及<a href="cpp-language-initialization.html">初始化</a>。</div>
|
|
<h3><span class="mw-headline" id="try_.E5.9D.97">try 块</span></h3>
|
|
<p>try 块提供当执行其他语句时捕获其所抛出的异常的能力。</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-mark">(可选)</span> <code><b>try</b></code> <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>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> 细节见 <a href="cpp-language-try_catch.html">try/catch</a>。</div>
|
|
<table class="t-rev-begin">
|
|
<tr class="t-rev t-since-tm_ts">
|
|
<td>
|
|
<h3><span class="mw-headline" id="atomic_.E4.B8.8E_synchronized_.E5.9D.97">atomic 与 synchronized 块</span></h3>
|
|
<p>atomic 与 synchronized 块用来实现<a href="cpp-language-transactional_memory.html">事务性内存</a>。</p>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>synchronized</b></code> <span class="t-spar">复合语句</span></td>
|
|
<td>(1)</td>
|
|
<td><span class="t-mark-rev t-since-tm-ts t-mark-ts">(TM TS)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>atomic_noexcept</b></code> <span class="t-spar">复合语句</span></td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-tm-ts t-mark-ts">(TM TS)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>atomic_cancel</b></code> <span class="t-spar">复合语句</span></td>
|
|
<td>(3)</td>
|
|
<td><span class="t-mark-rev t-since-tm-ts t-mark-ts">(TM TS)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td><code><b>atomic_commit</b></code> <span class="t-spar">复合语句</span></td>
|
|
<td>(4)</td>
|
|
<td><span class="t-mark-rev t-since-tm-ts t-mark-ts">(TM TS)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> <a href="cpp-language-transactional_memory.html#synchronized_.E5.9D.97">synchronized 块</a>,与所有 synchronized 块在一个全序中执行;</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> 在发生异常时中止的 <a href="cpp-language-transactional_memory.html#atomic_.E5.9D.97">atomic 块</a>;</div>
|
|
<div class="t-li1"><span class="t-li">3)</span> 在发生异常时回滚的 <a href="cpp-language-transactional_memory.html#atomic_.E5.9D.97">atomic 块</a>;</div>
|
|
<div class="t-li1"><span class="t-li">4)</span> 在发生异常时提交的 <a href="cpp-language-transactional_memory.html#atomic_.E5.9D.97">atomic 块</a>。</div>
|
|
</td>
|
|
<td><span class="t-mark-rev t-since-tm-ts t-mark-ts">(TM TS)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin"></table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|