390 lines
26 KiB
HTML
390 lines
26 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>std::optional</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_utility_optional skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::</span>optional</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-utility.html">utility</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-optional.html"><optional></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx17">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span> T <span class="sy1">></span><br />
|
|
<span class="kw1">class</span> optional<span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>类模板 <code>std::optional</code> 管理一个<i>可选</i>的容纳值,既可以存在也可以不存在的值。</p>
|
|
<p>一种常见的 <code>optional</code> 使用情况是一个可能失败的函数的返回值。与其他手段,如 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-pair.html"><span class="kw1095">std::<span class="me2">pair</span></span></a><span class="sy1"><</span>T,<span class="kw4">bool</span><span class="sy1">></span></span></span> 相比, <code>optional</code> 良好地处理构造开销高昂的对象,并更加可读,因为它显式表达意图。</p>
|
|
<p>任何一个 <code>optional<T></code> 的实例在给定时间点要么<i>含值</i>,要么<i>不含值</i>。</p>
|
|
<p>若一个 <code>optional<T></code> <i>含值</i>,则保证值作为 <code>optional</code> 对象所用空间的一部分分配,即不会发生动态内存分配。从而 <code>optional</code> 对象模拟一个对象,而非指针,尽管定义了 <span class="t-lc"><a href="cpp-utility-optional-operator*.html">operator*()</a></span> 和 <span class="t-lc"><a href="cpp-utility-optional-operator*.html">operator->()</a></span> 运算符。</p>
|
|
<p>当一个 <code>optional<T></code> 对象被<a href="cpp-language-implicit_conversion.html">按语境转换成 bool</a> 时,若对象<i>含值</i>则转换返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> ,若对象<i>不含值</i>则返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span> 。</p>
|
|
<p><code>optional</code> 对象在下列条件下<i>含值</i>:</p>
|
|
<ul>
|
|
<li>对象被以 <code>T</code> 类型值或另一<i>含值</i>的 <code>optional</code> 初始化/赋值。</li>
|
|
</ul>
|
|
<p>对象在下列条件下<i>不含值</i>:</p>
|
|
<ul>
|
|
<li>对象被默认初始化。</li>
|
|
<li>对象被以 <span class="t-lc"><a href="cpp-utility-optional-nullopt_t.html">std::nullopt_t</a></span> 类型值或<i>不含值</i>的 <code>optional</code> 对象初始化/赋值。</li>
|
|
<li>调用了成员函数 <span class="t-lc"><a href="cpp-utility-optional-reset.html">reset()</a></span> 。</li>
|
|
</ul>
|
|
<p>无引用的 optional :若以引用类型实例化 <code>optional</code> 则程序非良构。不过,可用 <code>T</code> 类型的 <span class="t-lc"><a href="cpp-utility-functional-reference_wrapper.html">std::reference_wrapper</a></span> 的 <code>optional</code> 保有引用。另外,若以(可有 cv 限定的)标签类型 <span class="t-lc"><a href="cpp-utility-optional-nullopt_t.html">std::nullopt_t</a></span> 或 <span class="t-lc"><a href="cpp-utility-in_place.html">std::in_place_t</a></span> 实例化 <code>optional</code> 则程序非良构。</p>
|
|
<h3><span class="mw-headline" id=".E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">模板形参</span></h3>
|
|
<table class="t-par-begin">
|
|
<tr class="t-par">
|
|
<td>T</td>
|
|
<td>-</td>
|
|
<td>要为之管理状态的值的类型。该类型必须满足<a href="cpp-named_req-Destructible.html"><span style="font-style:italic">可析构</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(Destructible)</span></a> 的要求。(特别是不允许数组类型)</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.88.90.E5.91.98.E7.B1.BB.E5.9E.8B">成员类型</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc-hitem">
|
|
<td>成员类型</td>
|
|
<td>定义</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td><code>value_type</code></td>
|
|
<td><code>T</code></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">成员函数</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div t-dsc-member-nobold-div">
|
|
<div><a href="cpp-utility-optional-optional.html"><span class="t-lines"><span>(构造函数)</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>构造<code>optional</code>对象<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div t-dsc-member-nobold-div">
|
|
<div><a href="cpp-utility-optional-~optional.html"><span class="t-lines"><span>(析构函数)</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>销毁容纳的值,若存在<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-operator=.html"><span class="t-lines"><span>operator=</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>对内容赋值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E8.A7.82.E5.AF.9F.E5.99.A8">观察器</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-operator*.html"><span class="t-lines"><span>operator-></span><span>operator*</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>访问所含值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-operator_bool.html"><span class="t-lines"><span>operator bool</span><span>has_value</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>检查对象是否含值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-value.html"><span class="t-lines"><span>value</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回所含值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-value_or.html"><span class="t-lines"><span>value_or</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>若所含值可用则返回它,否则返回另一个值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.8D.95.E5.AD.90.E6.93.8D.E4.BD.9C">单子操作</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-and_then.html"><span class="t-lines"><span>and_then</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx23">(C++23)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>若所含值存在则返回给定的函数在其上的结果,否则返回空的 <code>optional</code><br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-transform.html"><span class="t-lines"><span>transform</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx23">(C++23)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>若所含值存在则返回含有变换后的所含值的 <code>optional</code> ,否则返回空的 <code>optional</code><br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-or_else.html"><span class="t-lines"><span>or_else</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx23">(C++23)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>若 <code>optional</code> 含值则返回其自身,否则返回给定函数的结果<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E4.BF.AE.E6.94.B9.E5.99.A8">修改器</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-swap.html"><span class="t-lines"><span>swap</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>交换内容<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-reset.html"><span class="t-lines"><span>reset</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>销毁任何所含值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-emplace.html"><span class="t-lines"><span>emplace</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>原位构造所含值<br />
|
|
<span class="t-mark">(公开成员函数)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E9.9D.9E.E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">非成员函数</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-operator_cmp.html"><span class="t-lines"><span>operator==</span><span>operator!=</span><span>operator<</span><span>operator<=</span><span>operator></span><span>operator>=</span><span>operator<=></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>比较 <code>optional</code> 对象<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-make_optional.html"><span class="t-lines"><span>make_optional</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>创建一个 <code>optional</code> 对象<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-swap2.html"><span class="t-lines"><span>std::swap<span class="t-dsc-small">(std::optional)</span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>特化 <span class="t-lc"><a href="cpp-algorithm-swap.html">std::swap</a></span> 算法<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.BE.85.E5.8A.A9.E7.B1.BB">辅助类</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-hash.html"><span class="t-lines"><span>std::hash<span class="t-dsc-small"><std::optional></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>特化 <span class="t-lc"><a href="cpp-utility-hash.html">std::hash</a></span> 算法<br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-nullopt_t.html"><span class="t-lines"><span>nullopt_t</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>带未初始化状态的 <code>optional</code> 类型的指示器<br />
|
|
<span class="t-mark">(类)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-bad_optional_access.html"><span class="t-lines"><span>bad_optional_access</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指示进行了到不含值的 <code>optional</code> 的有检查访问的异常<br />
|
|
<span class="t-mark">(类)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.BE.85.E5.8A.A9.E5.AF.B9.E8.B1.A1">辅助对象</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-optional-nullopt.html"><span class="t-lines"><span>nullopt</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><code>nullopt_t</code> 类型对象<br />
|
|
<span class="t-mark">(常量)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-in_place.html"><span class="t-lines"><span>in_place</span> <span>in_place_type</span> <span>in_place_index</span> <span>in_place_t</span> <span>in_place_type_t</span> <span>in_place_index_t</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>原位构造标签<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.8E.A8.E5.AF.BC.E6.8C.87.E5.BC.95"><a href="cpp-utility-optional-deduction_guides.html">推导指引</a></span></h3>
|
|
<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 <string></span>
|
|
<span class="co2">#include <functional></span>
|
|
<span class="co2">#include <iostream></span>
|
|
<span class="co2">#include <optional></span>
|
|
|
|
<span class="co1">// optional 可用作可能失败的工厂的返回类型</span>
|
|
std<span class="sy4">::</span><span class="me2">optional</span><span class="sy1"><</span><a href="cpp-string-basic_string.html"><span class="kw1229">std::<span class="me2">string</span></span></a><span class="sy1">></span> create<span class="br0">(</span><span class="kw4">bool</span> b<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">if</span><span class="br0">(</span>b<span class="br0">)</span>
|
|
<span class="kw1">return</span> <span class="st0">"Godzilla"</span><span class="sy4">;</span>
|
|
<span class="kw1">else</span>
|
|
<span class="kw1">return</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 能用 std::nullopt 创建任何(空的) std::optional</span>
|
|
<span class="kw4">auto</span> create2<span class="br0">(</span><span class="kw4">bool</span> b<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> b <span class="sy4">?</span> std<span class="sy4">::</span><span class="me2">optional</span><span class="sy1"><</span><a href="cpp-string-basic_string.html"><span class="kw1229">std::<span class="me2">string</span></span></a><span class="sy1">></span><span class="br0">{</span><span class="st0">"Godzilla"</span><span class="br0">}</span> <span class="sy4">:</span> <a href="cpp-utility-optional-nullopt.html"><span class="kw1078">std::<span class="me2">nullopt</span></span></a><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// std::reference_wrapper 可用于返回引用</span>
|
|
<span class="kw4">auto</span> create_ref<span class="br0">(</span><span class="kw4">bool</span> b<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw4">static</span> <a href="cpp-string-basic_string.html"><span class="kw1229">std::<span class="me2">string</span></span></a> value <span class="sy1">=</span> <span class="st0">"Godzilla"</span><span class="sy4">;</span>
|
|
<span class="kw1">return</span> b <span class="sy4">?</span> std<span class="sy4">::</span><span class="me2">optional</span><span class="sy1"><</span><a href="cpp-utility-functional-reference_wrapper.html"><span class="kw1068">std::<span class="me2">reference_wrapper</span></span></a><span class="sy1"><</span><a href="cpp-string-basic_string.html"><span class="kw1229">std::<span class="me2">string</span></span></a><span class="sy1">>></span><span class="br0">{</span>value<span class="br0">}</span>
|
|
<span class="sy4">:</span> <a href="cpp-utility-optional-nullopt.html"><span class="kw1078">std::<span class="me2">nullopt</span></span></a><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1757">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"create(false) returned "</span>
|
|
<span class="sy1"><<</span> create<span class="br0">(</span><span class="kw2">false</span><span class="br0">)</span>.<span class="me1">value_or</span><span class="br0">(</span><span class="st0">"empty"</span><span class="br0">)</span> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 返回 optional 的工厂函数可用作 while 和 if 的条件</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span><span class="kw4">auto</span> str <span class="sy1">=</span> create2<span class="br0">(</span><span class="kw2">true</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1757">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"create2(true) returned "</span> <span class="sy1"><<</span> <span class="sy2">*</span>str <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">if</span> <span class="br0">(</span><span class="kw4">auto</span> str <span class="sy1">=</span> create_ref<span class="br0">(</span><span class="kw2">true</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="co1">// 用 get() 访问 reference_wrapper 的值</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1757">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"create_ref(true) returned "</span> <span class="sy1"><<</span> str<span class="sy2">-</span><span class="sy1">></span>get<span class="br0">(</span><span class="br0">)</span> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
str<span class="sy2">-</span><span class="sy1">></span>get<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="st0">"Mothra"</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1757">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"modifying it changed it to "</span> <span class="sy1"><<</span> str<span class="sy2">-</span><span class="sy1">></span>get<span class="br0">(</span><span class="br0">)</span> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</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">create(false) returned empty
|
|
create2(true) returned Godzilla
|
|
create_ref(true) returned Godzilla
|
|
modifying it changed it to Mothra</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-variant.html"><span class="t-lines"><span>variant</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>类型安全的可辨识联合体<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-any.html"><span class="t-lines"><span>any</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>可保有任何<a href="cpp-named_req-CopyConstructible.html"><span style="font-style:italic">可复制构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyConstructible)</span></a> 类型的实例的对象。<br />
|
|
<span class="t-mark">(类)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|