4

私が見つけることができるすべての説明は、クラスのコンテキストでの「メンバーへのポインター」について話します。ユニオンは構造に非常に似ており、特にメンバーもあります。それらのメンバーへのポインターもありますか?

例えば

union x {
    int a;
    float b;
};
int x::*p = &x::a;

上記の例では、ユニオン全体へのポインター、ユニオンのメンバーとしてのポインターなどは、実際にはオフセットであり、明らかにサイズ0です。この質問pに答えるには、この構成が必要です。

4

1 に答える 1

5

§3.9.2/1:複合型は次の方法で構築できます。…特定のクラスのオブジェクト内の特定の型のメンバーを識別する非静的50クラスメンバーへのポインタ。

§8.3.3/1:宣言TDで、Dの形式は…であり、nested-name-specifierはクラスを示します…</ p>

§5.3.1/3:単項演算子の結果は、&そのオペランドへのポインターです。オペランドは左辺値または修飾IDでなければなりません。オペランドが、タイプがあるクラスの非静的メンバーを指定する修飾IDである場合、結果はタイプ「タイプTのクラスCのメンバーへのポインター」を持ち、を指定するprvalueになります。mCTC::m

そしてもちろん§9.5/5:ユニオンはクラスキーで定義されたクラスunionです…</ p>

(§3.9.2/ 1も言及しています:クラスであるユニオン…)

クラスがユニオンになることはできないということは言うまでもありません。そのため、そのようなPTMタイプと値を作成できます。

于 2013-01-17T09:43:03.977 に答える