struct Dog{
int a;
int b;
};
int Dog::*location = &Dog::a
Dog* obj1 = new Dog;
obj1->*location = 3;
&Dog::a
指的是什么?
struct Dog{
int a;
int b;
};
int Dog::*location = &Dog::a
Dog* obj1 = new Dog;
obj1->*location = 3;
&Dog::a
指的是什么?
它创建了一个指向成员的指针,这就像一个指向类的数据成员的指针,但类实例尚未确定,它只是偏移量。(注意,当与多重继承或虚拟继承结合使用时,它比简单的偏移要复杂得多。但编译器会计算出细节。)
请注意最后一行中使用的指向成员的取消引用运算符->*
,其中类实例与指向成员的指针组合以产生特定实例的特定数据成员。
该变量location
称为“成员数据指针”。它是一个指向结构内某些东西的指针,但除非它与实际的对象指针一起使用,否则它没有意义。单独使用*location
的信息不足以解析为实际地址,而是obj1->*location
指实际位置。
& 表示获取某物的地址。