2

可能重复:
decltype 和括号

我在维基百科上找到了这个:

    auto c = 0;           // c has type int
    auto d = c;           // d has type int
    decltype(c) e;        // e has type int, the type of the entity named by c
    decltype((c)) f = c;  // f has type int&, because (c) is an lvalue

并且使用 ideone 编译器(他们使用的 C++0x idk)和 typeinfo 我无法看到 e 和 f 之间的差异。显然,我可能失败了,所以我想知道这是否是最终的 C++11 标准行为。

4

1 回答 1

2

是的,这是标准行为。它写在 §7.1.6.2[dcl.type.simple]/4 中,其中:

表示的类型decltype(e)定义如下:

  • ife是不带括号的id 表达式或不带括号的类成员访问,decltype(e) 是由 e 命名的实体的类型。
  • ...
  • 否则,如果e是左值,decltype(e)T&,其中T的类型是e
  • ...

由于c没有括号并且是一个id 表达式(这里是一个标识符,参见 §5.1.1[expr.prim.general]/7),decltype(c)因此将是 的类型c,即int.

由于(c)do 有括号并且是一个左值(例如(c)=1是一个有效的表达式),decltype((c))将是 的类型的左值引用类型(c),即int&.

于 2012-10-02T12:09:27.493 回答