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)、次のように定義されます。

  • かっこで囲まれていないid-expressionまたはかっこで囲まれていないクラス メンバー アクセスである場合eは 、e で指定されたエンティティの型です。decltype(e)
  • ...
  • それ以外の場合、がe左辺値の場合は です。ここで、は の型です。decltype(e)T&Te
  • ...

cは括弧を持たず、id -expression (ここでは識別子、§5.1.1[expr.prim.general]/7 を参照) であるため、decltype(c)は の型になります。cint

(c)括弧があり、左辺値 (たとえば(c)=1、有効な式) であるためdecltype((c))、 は の型の左辺値参照型になります。(c)これはint&です。

于 2012-10-02T12:09:27.493 に答える