ob->i理应返回ob的this地址却返回i,求技术解释
为什么
ob->i 返回成员i的值而非对象的this指针地址? 哈哈,这个误会其实挺常见的——你是把->操作符的核心作用和对象地址的概念搞混啦!
先把->的本质说清楚:它就是个成员访问操作符,专门用来让你通过对象指针,直接访问指针指向的那个对象的成员变量/成员函数。当你写ob->i的时候,编译器会直接定位到ob指向的对象内部的i变量,返回的就是i本身的值,和this指针半毛钱关系都没有。
那你为啥会觉得它应该返回this地址呢?大概率是把几个概念搞混了:
this指针是类的成员函数内部才能访问的特殊指针,它指向的是当前调用这个成员函数的对象的地址,但ob->i是直接访问成员变量,根本没涉及成员函数,自然不会扯到this。- 如果想拿到
ob指向的对象的地址,那直接写ob就行了——因为ob本身就是个指针变量,它存储的值就是目标对象的地址;要是想拿到ob这个指针自己的地址,那得写&ob。
给你贴个极简代码例子,一看就明白:
#include <iostream> struct TestObj { int i = 42; // 初始化成员i为42 }; int main() { TestObj my_obj; TestObj* ob = &my_obj; // ob指向my_obj,存储的是my_obj的地址 std::cout << ob->i << "\n"; // 输出42,直接取成员i的值 std::cout << ob << "\n"; // 输出my_obj的地址,也就是ob存储的值 std::cout << &ob << "\n"; // 输出ob这个指针变量自己的地址 return 0; }
最后再给你划个重点:
ob->成员:访问指针指向对象的成员,返回成员的值/引用ob:本身就是对象的地址(因为它是指向对象的指针)&ob:获取指针变量自身的地址
内容的提问来源于stack exchange,提问作者Saif Faidi
相关产品推荐
相关产品推荐

