-<p><img src="../img/warning.png" height="30px" width="auto" style="margin: 0; border: none"/> 注意 <code>decltype(i)</code> 是 <code>int</code> 而 <code>decltype((i))</code> 是 <code>int &</code>。这是因为 <code>decltype</code> 实际上有两个版本!当 <code>decltype</code> 中的内容只是单独的一个标识符(变量名)时,会得到变量定义时的类型;而当 <code>decltype</code> 中的内容不是单纯的变量名,而是一个复杂的表达式时,就会进入 <code>decltype</code> 的第二个版本:表达式版,会求表达式的类型,例如当变量为 <code>int</code> 时,表达式 <code>(i)</code> 的类型是左值引用,<code>int &</code>,而变量本身 <code>i</code> 的类型则是 <code>int</code>。此处加上 <code>()</code> 就是为了让 <code>decltype</code> 被迫进入“表达式”的那个版本,<code>decltype(auto)</code> 遵循的也是“表达式”这个版本的结果。</p> |
0 commit comments