this指针如何传递? 不大清楚你的意思。你是要把this传送给其它的class,还是。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么意思?gcc的作者其实就是这样处理C++的如果A是一个类,int f(int a)是A的一个函数。那么大概就是这个样子int A::f(int a)int _f(A* this, int a) 哦,不好意思,我说得不清楚。我的意思是,this指针的传递路径是如何的?他会在什么时候终止传递?就是,如果某一个对象调用了一个成员函数f,然后编译器会给传递一个this指针,但是,如果在这个函数f里面又有很多函数调用(这些函数又调用函数,函数层层调用),编译器给每个被调用的成员函数都传入一个this指针,在内层函数中的this指针回改变吗?他会是什么样的值? 经过我的观察C++通常是用ECX来传递this的,总之不是通过椎栈 当成员函数调完之后this指针不再有效CMyClass::MyFunc(){............}//成员函数返回后this不再有效 调用成员函数,需要一个this指针,他是隐含参数,将当你明白隐含参数的意思了,这个指针是对象实例的数据块的开始位置的指针,这个指针用来给成员函数访问数据变量用的,实例的首地址就是this指针,自然没有实例就没有this指针了。FlyingSch(FlyingSch)说是通过ECX传递的,可能是吧,我没有验证过。不过是肯定可以这样的,fastcall好多参数是通过寄存器传递。 绝对是通过ECX (无论是不是fastcall) {CString strString;strString.GetLength();}------------push ebpmov ebp,espsub ebp,8 //为strString分配内存,假如strString占用的内存为8Bmov ecx,ebp //获得strString的this指针call 1078ab07 //假如 CString::GetLength()的DLL地址为1078ab07pop ebp---------------1078ab07: //CString::GetLength()push ebp........mov ebx,ecx //用this指针.....pop ebpret //返回后this指针不再有效//大体上是这样的,猜的~~ 下个月结贴!大家多多发表高论!FlyingSch(FlyingSch) 举的例子不错! this 这么难?我可没弄明白。那运算付重载 不是少了个参数?this 不就进去了?我说得连自己都糊涂了重载= 会给一个参数,另一个又this给引入.不明白,我说得自己都不了解了。 举个例子:CMyclass{int d;void Show(int i);};main(){CMyclass aa;aa.Show(1);//编译以后就相当于CMyclass::Show(1,&aa),差不多是这样吧}void CMyclass::Show(int i){printf("%d",i+d);}//编译后void CMyclass::Show(int i,CMyclass* this){printf("%d",i+this::d);} [急]有了解CPK的吗,求算法! MFC 非模态对话框消息映射问题 高分求救:在service里如何访问一个远程共享的文件 如何释放一个由函数返回的char*变量? 当一个多文档程序关闭时(程序关闭,不是文档关闭)回发什么消息? 如何去除单文档程序的边框?? vc++6.0关于Access2000数据库的ODBC连接问题!!急! 100分!问题一解决马上给分! 退出线程的问题! 关于KILLFOCUS通知消息 对话框绘图中的强制转换问题? 拼音输入法的思路 CALLBACK函数中的几个参数的意义,尤其是nCode的意义,100分!
如果A是一个类,int f(int a)是A的一个函数。那么大概就是这个样子
int A::f(int a)int _f(A* this, int a)
我的意思是,this指针的传递路径是如何的?他会在什么时候终止传递?
就是,如果某一个对象调用了一个成员函数f,然后编译器会给传递一个this指针,但是,如果在这个函数f里面又有很多函数调用(这些函数又调用函数,函数层层调用),编译器给每个被调用的成员函数都传入一个this指针,在内层函数中的this指针回改变吗?他会是什么样的值?
{
............}//成员函数返回后this不再有效
FlyingSch(FlyingSch)说是通过ECX传递的,可能是吧,我没有验证过。不过是肯定可以这样的,fastcall好多参数是通过寄存器传递。
CString strString;
strString.GetLength();
}------------
push ebp
mov ebp,esp
sub ebp,8 //为strString分配内存,假如strString占用的内存为8B
mov ecx,ebp //获得strString的this指针
call 1078ab07 //假如 CString::GetLength()的DLL地址为1078ab07
pop ebp
---------------1078ab07: //CString::GetLength()
push ebp
........
mov ebx,ecx //用this指针
.....
pop ebp
ret //返回后this指针不再有效//大体上是这样的,猜的~~
大家多多发表高论!
FlyingSch(FlyingSch) 举的例子不错!
我可没弄明白。
那运算付重载 不是少了个参数?
this 不就进去了?
我说得连自己都糊涂了
重载= 会给一个参数,
另一个又this给引入.不明白,我说得自己都不了解了。
CMyclass
{
int d;
void Show(int i);
};
main()
{
CMyclass aa;
aa.Show(1);//编译以后就相当于CMyclass::Show(1,&aa),差不多是这样吧
}
void CMyclass::Show(int i)
{
printf("%d",i+d);
}
//编译后
void CMyclass::Show(int i,CMyclass* this)
{
printf("%d",i+this::d);
}