所有我能找到的描述都是在类的上下文中谈论“成员指针”。联合体与结构非常相似,并且特别具有成员。您是否也可以有指向这些成员的指针?
例如:
union x {
int a;
float b;
};
int x::*p = &x::a;
我不是在谈论指向整个联合体的指针,而是指向联合体成员的指针等。上面示例中的p
实际上将是一个偏移量,大小显然为0。 我需要这个结构来回答这个问题。
§3.9.2/1: 复合类型可以通过以下方式构造:…指向给定类对象中给定类型的非静态50类成员的指针,
§8.3.3/1: 在声明T D的情况下,其中D具有形式…和nested-name-specifier表示一个类,…
§5.3.1/3: 一元运算符&
的结果是其操作数的指针。操作数必须是lvalue或qualified-id。如果操作数是命名为某个类C
中类型为T
的非静态成员m
的qualified-id,则结果的类型为“指向类C的成员类型T”的prvalue,并指示C::m
。
当然还有§9.5/5:一个union是用类关键字union
定义的类...
(§3.9.2/1还提到了:unions,它们是类……)
没有提到该类不能是联合体,所以可以构造这样的PTM类型和值。
nullptr
相等比较? - Potatoswatternullptr
。一个指向联合体成员的指针也不应该相等。 - user743382&x::a
或nullptr
这两个不同的值。:) 而且nullptr
被实现为魔术不可能的偏移值(-1,如果我没记错的话),所以在GCC中偏移量是相关的。 - user743382
&x
强制转换为int *
来访问a
,而无需知道它的名称。 - user743382