C / C++ の共用体(union)を初歩的に使う
入門時にイマイチ使いどころがわからんかった共用体
プログラミングを初めて超初期のころ入門書で出会った
”union” ”共用体” のキーワード
自分の使っていた入門書では
構造体の直後位に解説されていて
いったいどこで使うの?
といった感じで放置していたが
最近使う機会があったので、一応覚書
(自分なりの)結論
キャストとかを駆使せずに”データにアクセスする手段”
記述法だけ似ている構造体とは別物と考えて良し
目的
構造体にオペレーターやキャストを使用せずに配列のようにアクセスする
確認用のプログラム
Vector3型風の構造体pos{ x y z } の各要素に”[ ]”でアクセスする。
本来ならposは配列でないので”[ ]”でアクセスできないが
共用体の機能でアクセスを可能にする
※動作確認は、VC2013
#include <iostream> #include <array> int main() { using namespace std; union testUnion{ struct { float x, y, z; } pos; array<float, 3> v; // もしくは、 float v[3]; }; testUnion uni; uni.v[0] = 100.0f; // uni.pos.x = 100.0; と同じ uni.v[1] = 200.1f; // uni.pos.y = 200.1; と同じ uni.v[2] = 300.2f; // uni.pos.z = 300.2; と同じ // つまりこう書ける for (int id = 0; id < 3; ++id){ uni.v[id] += 0.5f; } // 値表示 cout << uni.pos.x << endl; cout << uni.pos.y << endl; cout << uni.pos.z << endl; // 入力待ち rewind(stdin), getchar(); return 0; }
あとがき
記事にするほどのネタでもないけど入門時の自分が見たら
少しくらいは助かる気がしたので備忘録行き