変数の型を宣言するために auto ではなく decltype(x) を使用する必要があるのはいつですか? 質問する

変数の型を宣言するために auto ではなく decltype(x) を使用する必要があるのはいつですか? 質問する

decltype(x)マクロ内ではxオブジェクトの型が不明であるため、マクロ内で が変数名として使用されているのがわかります。

例えば:

decltype(x) y = expr;

autoの代わりに を簡単に使用できます。では、の代わりに変数型宣言が必要な状況とはdecltypeどのような状況でしょうか?decltypeauto

ベストアンサー1

decltypeコンパイル時に評価される未知の型を返す必要がある場合に便利です。

template<class A, class B>
void MultiplyAB(A a, B b, decltype(a*b)& output)
{
    output = a * b;
}

さらに、出力が参照によって処理される方法が気に入らない場合は、遅延指定の戻り値の型を使用することもできます (また、 も使用できますdecltype)。

template<class A, class B>
auto MultiplyAB(A a, B b) -> decltype(a*b)
{
    return a * b;
}

これらすべて、そしてそれ以上のことは、B.ストロウストルップによって次のように説明されている。C++ よくある質問

おすすめ記事