我正在处理我的一个应用程序问题。这里我面临的问题是我需要使用类对象的指针调用一些函数。
但主要问题是我没有类指针,而是我有一个成员变量值(可以说它是一个值列表)。在此之后,我用下面的代码做了一个小测试。
using namespace std;
class Person {
public:
Person(string name, int age) {
this->name = name;
this->age = age;
}
string getName() {
return name;
}
int getAge() {
return age;
}
void Print()
{
printf("This address is %x\n",this);
printf("age adress is %x\n",&age);
}
private:
int age;
string name;
};
int main() {
cout << "Creating a person..." << endl;
Person *johnDoe=new Person("John Doe", 25);
cout << "Person's name: " << johnDoe->getName() << endl;
cout << "Person's age: " << johnDoe->getAge() << endl;
johnDoe->Print();
delete johnDoe;
return 0;
}
执行的 coutput 是:
> ./a.out
Creating a person...
Person's name: John Doe
Person's age: 25
This address is 72918
age adress is 72918
现在我的疑问是:
是否保证类成员变量的地址总是指向对象的地址?如果我需要使用指针来调用其他核心 api 函数,我可以使用这个地址吗?
我google的时候看到了这个?
(C1x §6.7.2.1.13:“一个指向结构对象的指针,经过适当转换,指向它的初始成员……反之亦然。作为结构对象,可能有未命名的填充,但不是在它的开头。”)
即使在 c++ 和类的情况下也是如此吗?