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中文网其他相关文章!