C++ 変数タイプの取得
 
この記事では、標準の C++ で変数のデータ型を見つけるさまざまな方法について説明します。
C++ 変数タイプの取得
動的タイプまたは C++ の変数の実行時にタイプを見つける必要があるシナリオがあります。したがって、C++ ライブラリは、変数のタイプを見つけるためのさまざまなメソッドを提供してくれました。
方法の 1つは、C++ の <typeinfo> ライブラリにある typeid 演算子を使用することです。ただし、もう 1つは C++ 11 で導入されたもので、decltype(x) と呼ばれ、式を生成された結果のタイプに変換します。
古いバージョンの C++ では、各データタイプはコンパイル時に明示的に宣言する必要があります。ただし、新しいバージョンでは、型推論と呼ばれる式のデータ型を自動的に推定する機能があります。decltype() 演算子は、式のデータ型を自動的に推定する機能も提供します。
ただし、この記事では、それぞれの方法について詳しく説明します。
C++ で typeid 演算子を使用して変数のタイプを検索する
typeid 演算子は C++ の <typeinfo> ライブラリに存在し、実行時に提供される変数タイプを見つけるために使用されます。ただし、変数タイプの検索に使用される完全な関数は typeid(x).name() です。ここで、x はタイプを検索する必要のある変数です。
使用される name() メンバー関数は、変数のタイプを識別する文字シーケンスを返します。
ただし、データタイプのイニシャルを出力として返します。たとえば、int の場合は i を返し、float``f の場合は double を返し、タイプとして d を返します。
変数のタイプを見つけるために C++ の typeid 演算子を使用するコードを見てみましょう。
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
  int x = 200;
  float y = 200.790;
  cout << typeid(x).name() << endl;
  cout << typeid(y).name() << endl;
  cout << typeid(x * y).name() << endl;
  return 0;
}
出力:
i
f
f
上記の出力は、i が integer タイプを指しているのに対し、f は float タイプを指していることを示しています。さらに、C++ の typeid は、式のタイプを返すためにも使用されます。
上記の例では、typeid 演算子で渡される式は、2つの異なるデータタイプ int と float の乗算です。したがって、結果はより大きなデータタイプに変換されます。
C++ で decltype() 指定子を使用して変数のタイプを検索する
decltype(x) 指定子は C++11 で導入されました。結果の式のタイプを取得するために使用される演算子です。
auto キーワードは特定のタイプの変数を宣言するために使用されますが、decltype はその変数タイプを抽出します。auto と decltype はどちらも、データタイプの自動推論を参照するタイプ推論に基づいています。
decltype 演算子を使用して C++ で変数タイプを検索する例を見てみましょう。
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
float function1() { return 4.5; }
int function2() { return 34; }
int main() {
  decltype(function1()) a;
  decltype(function2()) b;
  cout << typeid(a).name() << endl;
  cout << typeid(b).name() << endl;
  return 0;
}
出力:
f
i
上記の例の変数 a および b のデータタイプは、function1 および function2 の戻りタイプと同じになります。
decltype 演算子の別の例を以下に示します。この例では、C++ で式の型を抽出します。
#include <bits/stdc++.h>
using namespace std;
int main() {
  float ft = 4.8;
  decltype(ft) a = ft + 9.8;
  cout << typeid(a).name();
  return 0;
}
出力:
f
出力 f は float データタイプを参照します。したがって、式 ft+9.8 を追加すると、結果のデータタイプは float になります。
ただし、typeid 演算子と decltype 演算子の主な違いは、typeid が実行時に型に関する情報を提供するのに対し、decltype はコンパイル時に型情報を提供することです。
まとめ
この記事では、C++ で変数の型を取得する方法について説明しました。2つの異なる方法について説明しました。1つは実行時に型を提供する typeid(x).name() を使用することであり、もう 1つはコンパイル時に型を提供する decltype(x) です。
ただし、これらの方法はどちらも効率的で使いやすいものです。