谁是this指针?

中才德创 2009-07-03 07:51:25
// vc2008
class AAA
{
public:
AAA() : m_a1(1){}

void display(void)
{
printf("m_a1 is : %d\n", m_a1);
}

private:
int m_a1;
};

int _tmain(int argc, _TCHAR* argv[])
{
AAA obj;
AAA *ptr = &obj;

obj.display();

ptr->display();

return 0;
}

/*
AAA *ptr = &obj;
lea eax,[ebp-8]
mov dword ptr [ebp-14h],eax

obj.display();
lea ecx,[ebp-8] // 有一参数送到ecx,大约是this
call 004111D1

ptr->display();
mov ecx,dword ptr [ebp-14h] // 有一参数送到ecx,大约是this
call 004111D1

书上说:
obj.display()被内化为display(&obj)
ptr->display()被内化为display(ptr)

问题一:
一直说,class的nonstatic成员函数的调用,会传进一个隐式this指针。

obj(&obj)是隐式this指针吗?

ptr是隐式this指针吗?

ecx是隐式this指针吗?
*/
...全文
18 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fleeboy 2009-07-03
  • 打赏
  • 举报
回复
学习了
苦寒 2009-07-03
  • 打赏
  • 举报
回复
我不懂,我是来学习的。
jack_doson 2009-07-03
  • 打赏
  • 举报
回复
当前对象 只能在成员函数 中使用
ysysbaobei 2009-07-03
  • 打赏
  • 举报
回复
顶下
帅得不敢出门 2009-07-03
  • 打赏
  • 举报
回复
this指针隐式传到类成员函数(非static)的参数中了
老邓 2009-07-03
  • 打赏
  • 举报
回复
#include <iostream>
#include <stdio.h>

using namespace std;

class AAA
{
public:
AAA() : m_a1(1){ cout << "this: " << this << endl; }

void display(void)
{
printf("m_a1 is : %d\n", m_a1);
}

private:
int m_a1;
};

int main()
{
AAA obj;
AAA *ptr = &obj;

obj.display();

ptr->display();

cout << "ptr: " << ptr << endl;
cout << "&obj: " << &obj << endl;
return 0;
}

输出:
this: 0x22ff68
m_a1 is : 1
m_a1 is : 1
ptr: 0x22ff68
&obj: 0x22ff68

Process returned 0 (0x0) execution time : 0.078 s
Press any key to continue.
老邓 2009-07-03
  • 打赏
  • 举报
回复
obj(&obj)是隐式this指针吗?


ecx是隐式this指针吗?


ecx是隐式this指针吗?


你可以输出他们的值,都是一样的。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧