当前位置:首页 » 编程语言 » java的this指针

java的this指针

发布时间: 2024-12-30 18:50:32

① 一个c++虚函数与this指针的问题

1.
不可以。
2.
是。
3.
是。
你这个疑问就实际上涉及到了编译技术。this指针你会发现他是C++的关键字,而不是在那个头文件里声明的变量。也就是说,this指针并不是一个真实存在的C++语言变量,“父类指针不能自动(隐式)转换为子类指针”实际上是C++语言的变量类型规则,但this指针并非一个变量,所以不需要遵循此规则。从执行中的程序来说,this指针是帮助函数确定对象的位置。
如果非要问,this指针到底是储存在哪里?你去看网络,它是这样说的“不存在所谓的this的“位置”,只是this表示了对象的存储位置而已。&this违反语义规则,是错误的用法,不会编译通过。”当然,这是从C++语言的层面上来谈。在程序运行中,其实确实是有一个地方储存this指针的值的,不过这只有在非静态函数被调用才存在的。在X86处理器中,储存这个值的地方是寄存器ecx,X86-64储存这个值的地方是rcx。下面给出例子。
void G(IA* a)
{
a->F();
}这段对应的汇编语言重点如下:
mov

rcx,
[rsp+28h+arg_0]
<——这里就是把对象的首地址(就是变量a的值)放在rcx中。
call

qword
ptr
[rax]

<——调用F()函数。
virtual void F()
{
this->member++;
}mov

[rsp+arg_0],
rcx

<——将rcx(其实就是所谓this指针)压进栈以防rcx寄存器有他用。
mov

rax,
[rsp+arg_0]
mov

eax,
[rax+0Ch]

<——通过this指针找到成员变量member的位置。
inc

eax

<——执行自增操作。
看到了吧,this指针不过就是类成员函数被调用时,被临时储存到rcx寄存器的对象首地址。
之所以啰嗦这么多,意思就是让你明白(如果你被上面所述搞得一头雾水),从程序实际运行的角度上看,this指针与其说是C++的指针,还不如说是编译技术里的东西,汇编/机器语言里根本没有类型一说(当然,机器最多分整数运行储存单元和浮点数运算储存单元),自然不存在什么类型转换了。

热点内容
数据库逻辑存储结构 发布:2025-07-10 09:26:56 浏览:917
密码编译找规律 发布:2025-07-10 09:18:10 浏览:511
电影视频缓存后 发布:2025-07-10 09:16:48 浏览:893
服务器搭建需要哪些东西 发布:2025-07-10 09:15:23 浏览:801
无限密码怎么改 发布:2025-07-10 09:14:32 浏览:104
coc按键精灵脚本 发布:2025-07-10 09:12:40 浏览:312
excel表格ftp函数 发布:2025-07-10 09:05:50 浏览:276
u2game的解压密码 发布:2025-07-10 09:05:14 浏览:597
c语言编译器ide苹果下载 发布:2025-07-10 09:05:13 浏览:294
andftp端口 发布:2025-07-10 08:57:04 浏览:607