Do decltype (c) e; и decltype ((c)) f; объявлять разные типы?

Возможный дубликат:
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, я не смог увидеть diff между e и f. Очевидно, что это, вероятно, неудача с моей стороны, поэтому я хотел бы знать, является ли это окончательным стандартным поведением C ++ 11.

2

Решение

Да и это стандартное поведение. Это написано в §7.1.6.2 [dcl.type.simple] / 4, где:

Тип обозначается decltype(e) определяется следующим образом:

  • если e является заключённый в скобки ID-выражение или доступ к элементу класса без скобок, decltype(e)
    тип сущности, названной e.
  • в противном случае, если e это значение, decltype(e) является T&, где T это тип e;

поскольку c не имеет круглых скобок и является ID-выражение (здесь идентификатор, см. §5.1.1 [expr.prim.general] / 7), decltype(c) будет тип c, который int,

поскольку (c) имеют круглые скобки и являются lvalue (например, (c)=1 является допустимым выражением), decltype((c)) будет ссылочный тип lvalue типа (c), который int&,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]