C++のunionとは
C++のunionは、同じメモリ位置に異なるデータ型を格納できる特殊なデータ構造です。
- メモリーの節約:unionを使うことで、各メンバーにメモリーを割り当てるのではなく、そのうちの1つのメンバーにのみメモリーを割り当てることができるので、メモリーの節約になります。
- データ共有:unionのメンバは同じメモリを共有しています。つまり、同時に1つのメンバの値のみ格納できます。1つのメンバに値を代入すると、前に格納されたメンバの値が上書きされます。
- データ型変換:unionを使ってデータ型変換ができます。例えば、unionのメンバの1つにfloat型を格納しておいて、int型として読み取るなど
次に、union の使い方について例を紹介します。
#include <iostream>
using namespace std;
union Data {
int i;
float f;
char str[20];
};
int main() {
Data data;
cout << "Memory size occupied by data : " << sizeof(data) << endl;
data.i = 10;
cout << "data.i : " << data.i << endl;
data.f = 220.5;
cout << "data.f : " << data.f << endl;
strcpy(data.str, "C++ Programming");
cout << "data.str : " << data.str << endl;
return 0;
}
彼女は私に本を返さなければならない
Memory size occupied by data : 20
data.i : 10
data.f : 220.5
data.str : C++ Programming
上記の例では、Dataというユニオンを定義しています。このユニオンは、i(整数型)、f(浮動小数点数型)、str(文字配列型)という3つのメンバー変数を持っています。ご覧のとおり、この3つのメンバー変数は同一のメモリ領域を共有しており、そのため、そのうち1つの値のみを格納することができます。main関数では、整数、浮動小数点数、文字列をそれぞれユニオンのメンバー変数に割り当て、その値を出力します。