【发布时间】:2019-09-10 18:32:54
【问题描述】:
我想知道指向成员的指针在 C++ 中是如何工作的。
我查看了一些地方,发现它们存储了某种偏移量。并使用成员在内存中的出现顺序与它们在类/结构定义中声明的顺序相同的事实。但是......
#include <iostream>
#include<typeinfo>
using namespace std;
struct S
{
S(int n): mi(n) {}
int mi;
int k;
int f() {return mi+k;}
};
int main()
{
S s(7);
int S::*pmi = &S::mi;
int S::*lop = &S::k;
int (S::*sf)() = &S::f;
cout<<&S::mi<<endl<<&S::k<<endl<<&S::f<<endl<<pmi<<endl<<lop<<endl<<sf<<endl;
cout<<typeid(lop).name()<<endl;
}
我预计会看到某种偏移量。但是,第一行中所有带有 cout
我不明白,如果所有人都给出 1,那么关于偏移量的信息存储在哪里?
如果你能解释到底发生了什么,那将非常有帮助。
【问题讨论】:
-
不确定,可能是误会。我将删除我的评论,因为 eeroikas 的回答已经提到了我真正追求的东西。
标签: c++ pointers datamember