首頁 >後端開發 >C++ >`decltype((...))` 中括號有何影響?

`decltype((...))` 中括號有何影響?

Linda Hamilton
Linda Hamilton原創
2024-11-03 05:38:30383瀏覽

 What's the Impact of Parentheses in `decltype((...))`?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn