union
「union」とは、結合・連合のことを意味する英語表現である。
「union」とは・「union」の意味
「union」は、結合や連合を意味する名詞である。州や国家などの連合、併合を意味することもある。また、結合体や連合組織、協会、連盟、連邦といった意味でも用いられる。そのほか、労働組合やユニオンのことも意味する。結婚や夫婦仲を意味する場合もある。「union」の発音・読み方
「union」の発音記号は「juːnjən」である。カタカナ読みだと「ユニオン」になる。「union」の語源・由来
「union」の語源は、ラテン語で一つにする、という意味の「unio」である。英語の「union」は、元々は「結合」や「合併」といった意味を持つ単語だった。しかし、19世紀にアメリカ合衆国で南北戦争が勃発すると、「union」は南北の州を結びつける象徴として使用されるようになった。また、この時期から「union」は、国家や政治的な集団を表す言葉としても用いられるようになったといわれている。「union」を含む英熟語・英語表現
「union」を含む英熟語や英語表現には、以下のようなものがある。「labor union」とは
「labor union」は、労働組合のことを指す。「trade union」という場合もある。
「student union」とは
「student union」は、大学や高校などの教育機関において、学生たちによって自主的に組織された団体を意味する。
「European Union」とは
「European Union」は、欧州連合のことである。略して「EU」と表記される。ヨーロッパを中心に結成された政治的・経済的な連合体である。
「Union Jack」とは
「Union Jack」は、英国国旗のことを意味する。「Union flag」と呼ばれることもある。
「union catalog」とは
「union catalog」は、図書館の総合目録を意味する。
「union station」とは
「union station」は、複数の鉄道会社やバス会社が共用する合同駅のことである。
「union」に関連する用語の解説
「union」に関連する用語には、次のようなものがある。「union(C言語)」とは
「union(C言語)」とは、複数の異なる型のデータを同じ領域に割り当てることができる共用体のことである。
「UNION TOKYO(セレクトショップ)」とは
「UNION TOKYO(セレクトショップ)」は、東京都渋谷区にあるストリートファッションのセレクトショップである。初号店は1989年にNYでオープン、2018年にTOKYOストアがオープンした。バイヤーは「UNION LA」と「UNION TOKYO」の2店舗でオーナーを務めるChris Gibbsである。
「union (雑誌)」とは
「UNION」は、日本のファッション・カルチャー雑誌である。1997年に創刊された。当初はストリートファッションや音楽、アートなどを扱ったムック本としてスタートしたが、その後、高級ブランドからストリートファッションまで幅広く取り扱う雑誌となった。年に2回発行されている。
「unionize」とは
「unionize」は、団結させる、組織化する、という意味の動詞である。たとえば、労働団体を組織することを「unionize」という。
「unionism」とは
「unionism」は、労働組合主義や団結主義を意味する。また、労働組合員、団結主義者のことを「unionist」という。アメリカ史においては、南北戦争時の連邦主義や連邦主義者を「unionism」や「unionist」と呼ぶ。イギリス史において、「unionism」や「unionist」はアイルランド統一主義とその主義者のことである。
「union」の使い方・例文
「union」を用いた例文としては、次のようなものが挙げられる。「The union between the two countries led to increased economic growth.(2つの国家間の連合は、経済成長を促進した。」
「She was proud to be a member of the teachers' union.(彼女は教師組合のメンバーであることを誇りに思っていた)」
「The union of these two chemicals creates a reaction that produces heat.(これら2つの化学物質の結合により、熱を発生する反応が起こる)」
「The union of the two companies was announced last week.(2つの企業の合併が先週発表された)」
「The European Union is a political and economic union of 27 member countries.(欧州連合は、27の加盟国から成る政治的・経済的な連合体である)」
「He is a proud member of the actor's union and has fought for better working conditions for performers.(彼は俳優組合のメンバーであり、パフォーマーのためにより良い労働条件を求めて戦ってきた)」
「The union of these two pieces of wood will create a stronger and more durable structure.(これら2つの木材の結合により、より強く、より耐久性のある構造物が作られる)」
共用体
【英】union
共用体とは、同じメモリ領域を異なる変数が共有する、プログラム言語におけるデータ型のことである。
共用体は、一般的には、C言語やC++におけるunionキーワードで定義したデータ型を指す。似たような構造でデータ型が異なる場合に用いられる。共用体を用いることで、別々の変数を用意することがなくなる上、煩雑さから開放される。
共用体は、各メンバを括っているために見た目は構造体と似ているが、各メンバが同じメモリ領域を共有するため、各メンバの先頭アドレスは同一となる。
領域の分割が容易であるためメモリの節約になるが、むやみに用いるのは非効率であり扱いも難しい。このような特性から単体で使われることはあまりなく、構造体のメンバの1つとして用いられることが多い。
ユニオン union
結合
結婚 1に関する研究は、結婚(行動) 2、すなわち法もしくは慣習により規定された権利と義務に伴う両性間の結合 3の頻度、結婚・婚姻(訳注)によって結びついている者たちの属性、そしてそのような結合(結婚)の解消を取り扱う。さらに、その発生頻度がある程度高ければ、その他の夫婦的結合(503-8)の研究もまたこれに含まれる。婚礼 4ないし結婚式 4とは、一人の男性と一人の女性の間の結合を配偶者 5、つまり夫 6と妻 7として一般に認知させるための儀式のことを指し、それは法もしくは慣習によって規定されている。配偶者同士を総称して、夫婦 8と呼ぶ。
関係の終了
ユニオン (曖昧さ回避)
労働組合関連
地名
- ユニオン (ニュージャージー州) - アメリカ合衆国の町。
- ユニオンシティ (ニュージャージー州) - アメリカの市。
- ユニオン郡(Union County、曖昧さ回避)- アメリカの郡。
- ユニオン島(Union Island)- 西インド諸島のグレナディーン諸島南端付近にある島。
- ユニオン (小惑星) - 小惑星帯にある小惑星。
施設
- ユニオンスクエア(Union Square、曖昧さ回避)
- ユニオン天文台 - 南アフリカハウテン州・ヨハネスブルグにかつて存在した天文台。
- ユニオン通り - 栃木県宇都宮市にある商店街・アーケード街の通りの名称。
- ユニオン駅(Union Station、曖昧さ回避)- 北米において複数の鉄道会社路線が乗り入れる共同駅
スポーツ関連
- ユニオン・ベースボール・グラウンズ(Union Base-Ball Grounds)- アメリカイリノイ州・シカゴにかつて存在した野球場。
- ユニオンプロレス - 日本のプロレス団体。
- ワールド・イン・ユニオン(World In Union) - ラグビーワールドカップのテーマ曲。
- ユニオンズ - かつて活動していた日本のプロ野球球団。
船
- ユニオン号 - 幕末時代の日本の蒸気船。
- ユニオン (潜水艦) - イギリス海軍の潜水艦
企業
音楽
- UNION - イエスが1991年にリリースしたアルバム。邦題は結晶。
- UNION (曲) - OxTの楽曲。
- UNION (アルバム) - CHARAが2007年にリリースしたアルバム。
- UNION - 有岡大貴・八乙女光・薮宏太の曲。アルバム『JUMPing CAR』の初回限定盤2に収録。
- UNION!! - ソーシャルゲーム「アイドルマスターミリオンライブ!シアターデイズ」の一周年を記念して制作された楽曲。
その他のユニオン
- 連合法 (1800年)(Act Of Union)- アイルランド王国とグレートブリテン王国との合併を定めた法律。通称「ユニオン法」。
- 共用体 - プログラミング言語の機能。C言語では、
union
という予約語で定義する。 - ユニオン映画 - 日本のテレビ番組制作会社。
- ユニオンソース - 日本のソースメーカー。
- ユニオン・デ・ファブリカン(Union Des Fabricants)- パリに本部を置く、知的財産権の普及・啓発団体。
- ユニオンモデル - かって存在した模型メーカー「ユニオン」の一部業務を引き継いだ、(有)スタジオミドのブランド名。
- ユニオンタクシー - 京都市に本社を置くタクシー会社。
- ユニオンレコード - テイチクエンタテインメントのかってのレーベルの一つ。
- ユニオンクレジット - ユーシーカードの前身、旧ユーシーカードの設立当初の社名。
- ユニオン (建築金具) - 日本の中堅建築金具メーカー。みどり会会員(同名企業に現物出資する株主会員)。
- ユニオン (建設コンサルタント) - 日本の建設コンサルタント。
- フレッシュプラザ ユニオン - 沖縄県内に18店舗を構えるスーパーマーケット。
- ガブリエル・ユニオン(Gabrielle Union)- アメリカネブラスカ州出身の女優。
- アニメ『機動戦士ガンダム00』に登場する国家群。正式名称「太陽エネルギーと自由国家の連合」。
共用体
(Union から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/27 00:24 UTC 版)
ナビゲーションに移動 検索に移動共用体(きょうようたい、英: union)は、プログラミング言語におけるデータ型の一つで、同じメモリ領域を複数の型が共有する構造である。
例として、ある入力が数字の場合は数値として、そうでない場合は文字列のまま保持したいという場合を考える。この場合、数値用と文字列用の領域をそれぞれ用意するのが一つの解法だが、入力は数値か文字列のどちらか一方なので、片方しか使われず無駄が出る。そこで代わりに、格納用の領域を一つだけ用意して、これを数値である、文字列であると場合により解釈し分けることで領域の無駄が抑えられる。この「格納用の領域」こそが共用体である。
共用体から意味のある値を取り出すためには、中身のデータそのものに加えて「今、何の型のデータが入っているか」という情報(タグという)が必要となる。タグを付加情報として持ち、常に正しい型でデータを得られるように設計された共用体を特にタグ付き共用体あるいはバリアント型という[1]。
一方で、タグの付いていない共用体の場合は、正しい型でアクセスすることは利用者側の責任である。利用者は何らかの方法で共用体に今何が入っているかを管理しなければならない。誤った型でアクセスした場合、例えば数値の入った共用体から文字列を取り出そうとして得られた値は大抵は無意味か不正なものとなる。ただし、敢えて格納時と異なる型で値にアクセスすることで、一つのバイト列に対して複数の型で解釈するテクニックもある。例としては、ある整数型の値が格納された共用体に、より小さな整数型が格納されているものとしてアクセスすることで、元々の長い整数の上位/下位バイト部分を取り出すことができる。このテクニックは実際にはエンディアンなど環境に強く依存し、移植性は低い。
C言語
C言語は(タグなし)共用体をサポートしている。Cの共用体は全てのメンバのオフセットが0である(つまり先頭バイトから始まる)構造体であり、宣言に予約語struct
ではなく共用体を意味するunion
を使うことを除いて構造体と全く同じ構文で宣言・定義される。またメンバへのアクセスも構造体と同様に.
演算子あるいは->
演算子で行える。共用体全体のサイズは少なくともメンバの中で最大のものを格納できる大きさに決められる(後ろにパディングされる可能性がある)。
共用体の初期化は、先頭で宣言したメンバの型で行わなければならない。
構造体を含む共用体については配置について特別な規定があり、共用体のメンバとして、先頭のメンバの型が同じである構造体を複数持つ場合は、それらの構造体の先頭メンバに限り、正確に重なり合うことが保証される。つまり、先頭メンバは別の構造体の先頭メンバの名前でも正しく参照できる。この仕様は似たような構成の構造体を集めた共用体で、先頭メンバをタグ情報として使うために役立つ。
#include <stdio.h>
#include <string.h>
/* 共用体 MyUnion1 を定義 */
union MyUnion1 {
double x;
int y;
char z[10];
/* double, int, char[10]のいずれかを格納できる */
};
/* 共用体 MyUnion2 を定義:構造体の共用体 */
union MyUnion2 {
struct Foo {
int ifoo;
double dfoo;
} foo; /* 構造体Fooとメンバfooの定義 */
struct Bar {
int ibar;
void *pbar;
} bar; /* 構造体Barとメンバbarの定義 */
}; /* FooとBarの先頭メンバは同じ型(int) */
/* 共用体を使ってみる */
int main(void) {
/* 共用体変数の宣言と初期化 */
/* 先頭メンバの型(double)で初期化しなければならない */
union MyUnion1 u1 = { 100.0 };
union MyUnion2 u2;
#ifdef __cplusplus
/* C++ では、入れ子になった型はスコープ解決演算子で名前修飾する必要がある */
MyUnion2::Foo f = { 3, 0.14 };
#else
struct Foo f = { 3, 0.14 };
#endif
u1.y = 42; /* int型の値を書き込む */
strcpy(u1.z, "UnionTest"); /* charの配列を書き込む */
/* u1.y += 100; */ /* 不正: charの配列が入ったu1をint型として扱っている */
u2.foo = f; /* Foo構造体を書き込む */
u2.bar.ibar = 9; /* OK: Barの先頭メンバとしてアクセスしても良い */
/* u2.bar.pbar = NULL; */ /* これはダメ: 今u2に入っているのはあくまでFoo型 */
return 0;
}
C99までは無名の構造体および共用体が許可されていなかったが、C11では許可されるようになった[2][3]。
#include <stdio.h>
enum VariantType {
VariantTypePointer,
VariantTypeInt,
VariantTypeDouble,
};
struct Variant {
enum VariantType type;
union { /* 無名の共用体 */
void* p;
int i;
double d;
};
};
int main(void) {
struct Variant v1;
v1.type = VariantTypePointer;
v1.p = NULL;
v1.type = VariantTypeInt;
v1.i = 999;
v1.type = VariantTypeDouble;
v1.d = 0.5;
return 0;
}
C++
C++の共用体はクラス(および構造体)の一種で、Cの共用体の機能に加え、メンバ関数を持てるなど機能が追加されている。ただし普通のクラス(および構造体)に比べ以下のような制約が加わっている。
- 継承の機能がない。
- 基底クラスを持つことができない。
- 共用体から派生することはできない。
- 仮想関数を持てない。
- 静的メンバを持てない。
- PODでないクラスのオブジェクト型のメンバを持てない[4]。
- 参照型のメンバを持てない。
これらの制約の一部はC++11で撤廃された。
また、C++では共用体タグ名[5]を省略して定義することで、スコープを形成しない無名の共用体を作れるようになった。ただし、無名の構造体は許可されていない[6]。
先の制約のために、標準ライブラリのものも含めてほとんどのクラスは共用体に格納できない。これは共用体がタグ情報を持たないために、コンストラクタやデストラクタを正しく実行するコードを自動生成できないからである。そのため、C++で共用体が積極的に利用されることは少ない。
なお、共用体に類似したC++の機能にreinterpret_cast
があり、バイト列再解釈の用途にはこちらが用いられることが一般的である。
#include <iostream>
#include <string>
// 共用体Uを定義
union U {
private:
double x;
int y;
//std::string z; // 不正: PODでないクラスはメンバにできない
std::string *z; // ポインタは可
public:
// コンストラクタ、デストラクタおよびメンバ関数を持てる
explicit U(double d) : x(d) { std::cout << "U(double)" << std::endl; }
explicit U(int i) : y(i) { std::cout << "U(int)" << std::endl; }
~U() { std::cout << "~U()" << std::endl; }
double getDouble() const { return x; }
int getInt() const { return y; }
};
int main(void) {
U u1(3.14), u2(22); // コンストラクタによる共用体の構築
std::cout << u1.getDouble() << std::endl; // メンバ関数呼び出し
std::cout << u2.getInt() << std::endl;
//std::cout << u2.getDouble() << std::endl; // ※何が起こるかわからない
// 無名共用体
union {
int i;
char c;
};
i = 777; // メンバは外から見える
c = 'X';
std::cout << c << std::endl;
//std::cout << i << std::endl; // ※何が起こるかわからない
return 0;
}
C#
C#では、共用体専用の構文は存在しない。 ただし、System.Runtime.InteropServices.StructLayoutAttribute
で明示的なレイアウトを指定した構造体では、共用体同様の動作を指定することが可能である。
以下に例を示す。
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
public struct Union {
// メモリレイアウトのオフセットを指定する
[FieldOffset(0)]
public byte B0;
[FieldOffset(1)]
public byte B1;
[FieldOffset(2)]
public byte B2;
[FieldOffset(3)]
public byte B3;
// メモリレイアウトのオフセットを B0, B1, B2, B3 と同じ領域に重ねる
[FieldOffset(0)]
public int N;
}
class Program {
static void Main() {
var u = new Union();
// N の領域に値を書き込む
u.N = 0x12345678;
// B0, B1, B2, B3 の領域より値を読み出す
Console.WriteLine(u.N.ToString("X")); // ⇒ 12345678
Console.WriteLine(u.B0.ToString("X")); // ⇒ リトルエンディアンでは 78
Console.WriteLine(u.B1.ToString("X")); // ⇒ リトルエンディアンでは 56
Console.WriteLine(u.B2.ToString("X")); // ⇒ リトルエンディアンでは 34
Console.WriteLine(u.B3.ToString("X")); // ⇒ リトルエンディアンでは 12
}
}
脚注
- ^ 例えばMicrosoft Windows SDKの
<oaidl.h>
では、共用体を利用したVARIANT
型が定義されている。 - ^ 共用体宣言 - cppreference.com
- ^ 多くのCコンパイラでは(C11よりも前の時代から)拡張として無名の構造体および共用体をサポートしている。
- ^ 全ての共用体メンバは必ずPODだが、共用体自身がPODになるとは限らない。共用体はユーザー定義のコンストラクタなどを持てるからである。
- ^ 共用体の型名を決める識別子(
union xxx {...};
のxxx
)のことで、冒頭の説明にある「タグ情報」とは別物。 - ^ 多くのC++コンパイラでは拡張として無名の構造体をサポートしている。
出典
- ブライアン・カーニハン、デニス・リッチー (1988). The C Programming Language (2nd ed.) (K&R). Prentice Hall. ISBN 0-13-110362-8
- ビャーネ・ストロヴストルップ (1994). The Design and Evolution of C++. Addison-Wesley. ISBN 0-201-54330-3
- ビャーネ・ストロヴストルップ (2000). The C++ Programming Language. Addison-Wesley. ISBN 0-201-70073-5
関連項目
固有名詞の分類
- Unionのページへのリンク