首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >class::data_member对class_object.data_member

class::data_member对class_object.data_member
EN

Stack Overflow用户
提问于 2012-08-14 07:29:17
回答 1查看 66关注 0票数 0

我刚刚看到了a post,在其中我发现了一些我以前从未见过的东西,简而言之,它是:

代码语言:javascript
复制
class A {
public:
    int _x;
};

void foo(A *a_ptr, int *m_ptr)
{
    cout << (*a_ptr).*m_ptr << endl;  // here
}

int main()
{
    A a;
    a._x = 10;
    foo(&a, &A::_x);   // and here
}

怎么做呢?传入&A::_x,然后使用(*a_ptr).*m_ptr引用它

我想,&A::_x总是指同一个地址,但是不同的对象有不同的_x,怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2012-08-14 07:58:38

&A::_x是一个指向成员的指针,而不是指针.相反,把它看作是某种相对的构造,它告诉您在对象中找到特定成员元素的位置。只有与实例引用一起,才能找到由成员指针提供的实例的实际子对象。

比较:

代码语言:javascript
复制
struct Foo { int x; int y; };

Foo a = { 1, 2 };
Foo b = { 3, 4 };
Foo c = { 5, 6 };

int * p = &a.x;  // ordinary pointer-to-int

int Foo::*pm = &Foo::x;             // pointer-to-member
int result = a.*pm + b.*pm + c.*pm; // aggregate Foo::x
// point to a different member:
pm = &Foo::y;
result = a.*pm + b.*pm + c.*pm;     // aggregate Foo::y
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11947667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档