decltype((...)) 中的雙括號意味著什麼?
C 標準定義了 decltype(( ...)) FCD 第 7.6.1.2/4 節的語法。此語法允許程式設計師推斷表達式的類型,如以下範例所示:
<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>
decltype((a->x)) 中表達式周圍括號的存在會產生顯著差異在推導類型中。如果沒有括號,類型只是 double,表示成員存取的回傳類型 (a->x)。
但是,有了括號,表達式就變成左值了。根據標準,如果e是左值,則decltype(e)是T&,其中T是e的型別。在這種情況下,T 是 double,因此推導的類型是 const double&。
因此,decltype((a->x)) 中的括號強制推導將表達式視為左值,結果是與省略括號時的類型不同。
以上是`decltype((...))` 中括號有何影響?的詳細內容。更多資訊請關注PHP中文網其他相關文章!