class::data_member vs class_object.data_member
class::data_member vs class_object.data_member
我刚刚看到一个帖子,其中我发现了以前从未见过的东西,简而言之,它是:
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
,怎么可能呢?
&A::_x
是指向成员的指针,而不是指针。相反,将其视为某种相对构造,它告诉您在对象内部的哪个位置可以找到特定的成员元素。只有与实例引用一起,才能找到由成员指针给出的该实例的实际子对象。
比较:
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
相关文章:
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 使用 GraphicsPath::AddString() 抱怨"class 'GraphicsPath' has no member 'AddString'"
- 尝试打印字符串时"Python Exception <class 'gdb.error'> There is no member named _M_dataplus."
- 将数据添加到 CArray 会产生错误"cannot access private member declared in class 'CObject'"
- "Default member initializer needed within definition of enclosing class outside of member functions
- [class.union]/3 注释中"Absent default member initializers, ..."的句子的目的是什么?
- "does class T have member X":已定义类模板
- C++ 小错误:"... is not a static data member of ‘class ...'"
- 最适合"set with class member as key"的数据结构?
- 在 c++ 中获取"is not a static member of class"错误
- 为什么我会看到"member function with the same name as its class must be a constructor"?
- 如何修复编译器错误"class has no member named X"?
- "class::data member is private"错误,但我正在使用成员函数对其进行操作?
- LNK2001 "How can I make a WNDPROC or DLGPROC a member of my C++ class?"
- 无法将"member pointer to derived class"转换为"member pointer to base class"
- C++:离奇发生的"Request for member X of Y which is of non-class type Z"
- c++11: std::bind for sub-class member-functions
- 找到"cannot access private member declared in class 'QObject'"的根本原因
- 无法用C++编写相同的 Java 代码"cannot initialize class member here"因为错误
- 子构造函数无法识别基类的成员:平均值,西格玛"is not a nonstatic data member or base class"