Skip to content

Commit

Permalink
deploy: 3e1e3e2
Browse files Browse the repository at this point in the history
  • Loading branch information
y1yang0 committed Nov 8, 2024
1 parent 326eab8 commit 670dee1
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 4 deletions.
2 changes: 1 addition & 1 deletion 1.DeducingTypes/item3.html
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ <h2 id="条款三理解decltype"><a class="header" href="#条款三理解decltyp
authAndAccess(d, 5) = 10; //认证用户,返回d[5],
//然后把10赋值给它
//无法通过编译器
//无法通过编译
</code></pre>
<p>在这里<code>d[5]</code>本该返回一个<code>int&amp;</code>,但是模板类型推导会剥去引用的部分,因此产生了<code>int</code>返回类型。函数返回的那个<code>int</code>是一个右值,上面的代码尝试把10赋值给右值<code>int</code>,C++11禁止这样做,所以代码无法编译。</p>
<p>要想让<code>authAndAccess</code>像我们期待的那样工作,我们需要使用<code>decltype</code>类型推导来推导它的返回值,即指定<code>authAndAccess</code>应该返回一个和<code>c[i]</code>表达式类型一样的类型。C++期望在某些情况下当类型被暗示时需要使用<code>decltype</code>类型推导的规则,C++14通过使用<code>decltype(auto)</code>说明符使得这成为可能。我们第一次看见<code>decltype(auto)</code>可能觉得非常的矛盾(到底是<code>decltype</code>还是<code>auto</code>?),实际上我们可以这样解释它的意义:<code>auto</code>说明符表示这个类型将会被推导,<code>decltype</code>说明<code>decltype</code>的规则将会被用到这个推导过程中。因此我们可以这样写<code>authAndAccess</code></p>
Expand Down
2 changes: 1 addition & 1 deletion print.html
Original file line number Diff line number Diff line change
Expand Up @@ -644,7 +644,7 @@ <h3 id="函数实参"><a class="header" href="#函数实参">函数实参</a></h
authAndAccess(d, 5) = 10; //认证用户,返回d[5],
//然后把10赋值给它
//无法通过编译器
//无法通过编译
</code></pre>
<p>在这里<code>d[5]</code>本该返回一个<code>int&amp;</code>,但是模板类型推导会剥去引用的部分,因此产生了<code>int</code>返回类型。函数返回的那个<code>int</code>是一个右值,上面的代码尝试把10赋值给右值<code>int</code>,C++11禁止这样做,所以代码无法编译。</p>
<p>要想让<code>authAndAccess</code>像我们期待的那样工作,我们需要使用<code>decltype</code>类型推导来推导它的返回值,即指定<code>authAndAccess</code>应该返回一个和<code>c[i]</code>表达式类型一样的类型。C++期望在某些情况下当类型被暗示时需要使用<code>decltype</code>类型推导的规则,C++14通过使用<code>decltype(auto)</code>说明符使得这成为可能。我们第一次看见<code>decltype(auto)</code>可能觉得非常的矛盾(到底是<code>decltype</code>还是<code>auto</code>?),实际上我们可以这样解释它的意义:<code>auto</code>说明符表示这个类型将会被推导,<code>decltype</code>说明<code>decltype</code>的规则将会被用到这个推导过程中。因此我们可以这样写<code>authAndAccess</code>:</p>
Expand Down
2 changes: 1 addition & 1 deletion searchindex.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion searchindex.json

Large diffs are not rendered by default.

0 comments on commit 670dee1

Please sign in to comment.