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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探