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

c++ return

 

 

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

c++ return

 

 

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

原文链接: https://www.cnblogs.com/uestc-du/p/17063655.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++ return

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/313435

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午12:48
下一篇 2023年2月16日 下午12:50

相关推荐