decltype 中雙括號的型別推導
在 C 中, decltype 關鍵字可用來決定表達式的型別。當與雙括號一起使用時,它會表現出一種微妙的行為,可能會導致混亂。
問題:
考慮以下程式碼片段:
<code class="cpp">const int&&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) x4 = x3; // type is const double&</code>
為什麼第四行的a->x 加號括號後結果類型會從double 變成const double&?
答案:
解釋在於使用decltype 推導類型的規則。根據 C 語言標準:
在給定的例如:
因此,向a- >x 新增括號會將類型推導從存取的成員類型變更為對成員本身的參考。
以上是為什麼在 `decltype` 中使用雙括號會改變結果類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!