二重括弧付きの decltype((...)) はどういう意味ですか? [重複] 質問する

二重括弧付きの decltype((...)) はどういう意味ですか? [重複] 質問する

FCD の 148 ページの例の最後の行 (§7.6.1.2/4) が理解できません。

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&

ここで括弧がなぜ重要なのでしょうか? 単純にdouble上の行のようにすればよいのではないでしょうか?

ベストアンサー1

その例のすぐ上には、

  • eが括弧で囲まれていないID式またはクラスメンバーアクセス(5.2.5)である場合、decltype(e)はeで指定されたエンティティの型になります。
  • e が lvalue の場合、decltype(e) は T& になります。ここで、T は e の型です。

decltype(a->x)これは「クラス メンバー アクセス」の例であり、decltype((a->x))lvalue の例であると思います。

おすすめ記事