decltype 中双括号的类型推导
在 C 中, decltype 关键字可用于确定表达式的类型。当与双括号一起使用时,它会表现出一种微妙的行为,可能会导致混乱。
问题:
考虑以下代码片段:
<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>
为什么第四行a->x加括号后结果类型会从double变成const double&?
答案:
解释在于使用 decltype 推导类型的规则。根据 C 语言标准:
在给定的示例中:
因此,向 a->x 添加括号会将类型推导从访问的成员类型更改为对成员本身的引用。
以上是为什么在 `decltype` 中使用双括号会改变结果类型?的详细内容。更多信息请关注PHP中文网其他相关文章!