C++のunionとは

C++のunionは、同じメモリ位置に異なるデータ型を格納できる特殊なデータ構造です。

  1. メモリーの節約:unionを使うことで、各メンバーにメモリーを割り当てるのではなく、そのうちの1つのメンバーにのみメモリーを割り当てることができるので、メモリーの節約になります。
  2. データ共有:unionのメンバは同じメモリを共有しています。つまり、同時に1つのメンバの値のみ格納できます。1つのメンバに値を代入すると、前に格納されたメンバの値が上書きされます。
  3. データ型変換: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関数では、整数、浮動小数点数、文字列をそれぞれユニオンのメンバー変数に割り当て、その値を出力します。

bannerAds