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>
4 行目の a->x に括弧を追加すると、結果の型が double から const double& に変わるのはなぜですか?
答え:
説明は次のとおりです。 decltype を使用して型を推定するための規則。 C 言語標準によれば:
指定された例では、
したがって、a->x に括弧を追加すると、アクセスされるメンバーの型からメンバー自体への参照への型推定が変更されます。
以上が「decltype」で二重括弧を使用すると、結果の型が変わるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。