首页  >  文章  >  后端开发  >  `decltype((...))` 中括号有什么影响?

`decltype((...))` 中括号有什么影响?

Linda Hamilton
Linda Hamilton原创
2024-11-03 05:38:30337浏览

 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