decltype 的高階應用程式
在 C 語言中,decltype 運算子是決定表達式類型的強大工具。雖然它通常按照您的預期運行,但在某些情況下,使用雙括號可能會產生顯著差異。
如FCD (§7.6.1.2/4) 所述:
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&
問題出現了:為什麼最後一行的括號會有所不同?直觀上,人們可能會認為它應該只是雙精度,類似於上面的行。
但是,FCD 提供了一些見解:
在這種情況下,decltype(a->x) 是類別成員訪問,因此x3 具有a->x 命名的實體的類型,為double。然而,decltype((a->x)) 是一個左值,因此,x4 具有 a->x 的型別,即 const double&。
這種差異很微妙,但對於理解decltype 的細微差別。透過利用雙括號的力量,程式設計師可以更精確地操作和確定類型,從而實現更健壯和靈活的程式碼。
以上是為什麼 `decltype` 行為會因雙括號而改變?的詳細內容。更多資訊請關注PHP中文網其他相關文章!