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,临时空间的变量,函数参数变量a
标签:return,变量,int,c++,eax,析构,拷贝 From: https://www.cnblogs.com/uestc-du/p/17063655.html