c++ return

return本是上是一个拷贝过程,不过是右值拷贝,也就是无标记变量的拷贝。

不管是返回指针还是返回值return首先将要return的值存到eax寄存器中回到父函数再将返回的值赋给变量

int A{return 0;}

int main()

{

  int i = A;

}

其实是先将0放入eax寄存器中,然后在回到主函数的时候 int i = eax(0);,之后将eax中的值清除,完成return过程

 

不只是return,其他的函数传值,比如foo(A a)也是一样的,都是拷贝过程,只不过foo(A a)的拷贝过程是A a = b,他们都是调用的拷贝构造函数。

main的栈上事先开辟了一个临时空间把这个空间的地址隐式的转foo函数栈上然后,把a内的东西,拷贝到临时空间中。 所以发生一次构造,一次拷贝,两次析构

临时空间中对象生成与销毁时会调用一次构造和一次析构,a = b的时候发生一次拷贝,a使用结束后再次析构。也就是一次函数传参实际上涉及了三个变量,主函数的变量b,

临时空间的变量(后转换到了b),函数参数变量a

 

 

0x61fe0f constructor
in foo :0x61fe0f
0x61fe0e cp contructor from 0x61fe0f
in main:0x61fe0e
0x61fe0e destructor
0x61fe0f destructor

 

 

0x61fe0e constructor
0x61fe0f cp contructor from 0x61fe0e
in foo :0x61fe0f
0x61fe0d cp contructor from 0x61fe0f
0x61fe0f destructor
in main:0x61fe0d
0x61fe0d destructor
0x61fe0e destructor

posted @   纸包鱼  阅读(409)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示