c++ の decltype 推論規則は?

C++11では、decltypeというキーワードが導入され、式の型を推論できるようになりました。その規則をまとめると次のようになります。

  1. 識別子(変数名や関数名)である場合は式から型を推論します。例えば、int x = 5; ならば、decltype(x) の型は int です。
  2. 関数が呼び出された場合、戻り値の型は推論結果の型になります。例: int f(); の場合、decltype(f()) の型は int です。
  3. 左辺値の式の場合、その型は参照型として推論されます。例えば、int x = 5;とすると、decltype((x))の型はint&になります。
  4. 式が右辺値の場合は、その型を非参照型と推論します。例えば、int x = 5; とした場合、decltype(x + 1) の型は int です。
  5. 複数のオーバーロード関数を持つ関数の呼び出しである場合、表現式の型推論は失敗します。このとき、型推論を実行するには標準ライブラリ型std::common_typeを使用する必要があります。例えば、int f(int); double f(double); のように宣言された関数fの場合、decltype(std::common_type<int, double>::type())は型doubleを導きます。
  6. 式はコンパイルできない式の場合、型推論は失敗する。例えば、decltype(undeclared_variable)はコンパイルエラーを引き起こす。

これらのルールによりコンパイル時に式の型を推論し、より柔軟で安全なプログラミングが可能になります。

bannerAds