如何在类对象内部正确使用成员指针(合法语法)
成员指针访问类成员的正确语法
要通过成员指针访问类的成员,你需要将对象实例和成员指针结合起来,在类的成员函数里直接用this->*ptr或者(*this).*ptr就能拿到对应成员的值,这是C++标准规定的合法语法。
修改后的完整代码如下:
class foo { public: size_t x{ 33 }; size_t y{ 77 }; size_t z{ 99 }; size_t get_by_ptr(size_t foo::*ptr) { // 使用this指针结合成员指针访问对应成员 return this->*ptr; // 也可以写成 return (*this).*ptr; 两种写法等价 } }; int main() { foo bar; size_t foo::*ptr{ &foo::y }; size_t z{ bar.get_by_ptr(ptr) }; // z的值会是77 }
补充说明
- 成员指针
size_t foo::*ptr存储的是成员相对于类对象基地址的偏移量,必须绑定到具体的对象实例(这里就是this指向的当前对象)才能完成成员访问。 ->*和.*是C++专门为成员指针设计的访问运算符,前者用于对象指针,后者用于对象实例。
内容的提问来源于stack exchange,提问作者user1857087
相关产品推荐
相关产品推荐

