作业帮 > 综合 > 作业

C++有关类的组合的拷贝函数中函数调用顺序的问题!

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 00:09:49
C++有关类的组合的拷贝函数中函数调用顺序的问题!
class Point
{
public:
Point(int xx=0,int yy=0)
{
X=xx;
Y=yy;
cout
我来帮你梳理一下
Point myp1(1,1),myp2(4,5);////这个顺序你应该知道了,很好,继续往下
Line line(myp1,myp2);/////好像问题的节点就在这里,这个拷贝构造实际是在传递参数过程中发生的,即用两个对象myp1,myp2作为参数传给Line时,中间会发生一次拷贝,这个很好理解
就像我们调函数一样,传给函数的参数是一个拷贝而已
所以就理解了为什么这里会调两次拷贝构造,为什么是4,5在前,是因为编译器压栈的顺序,参数按照从右到左的顺序
再问: 额,那个什么编译器的压栈顺序能将清楚点么,不太懂啊。 重点是它的调用顺序啊。 两个对象myp1,myp2作为参数传给Line时,中间会发生一次拷贝,这个为什么不先把myp1传入呢? 按我的思路是 X=1,Y=1Point拷贝构造函数被调用 X=4,Y=5Point拷贝构造函数被调用 而不是 X=4,Y=5Point拷贝构造函数被调用 X=1,Y=1Point拷贝构造函数被调用 然后后面又为什么先把myp1传入呢? 按它的思路不应该是 X=4,Y=5后面的省略了 X=1,Y=1
再答: 1.代码并不是在连续的内存里面的 2.程序执行过程中,经常会从一个地址跳转到另外一个地址去执行 3.执行过之后程序如何跳转回来呢? 就需要程序保存下来当前的位置,寄存器信息等,这些东西放入栈内,我们称之为压栈 4.其实函数调用,或者传参是类似的,先将参数放入栈中,再跳转到函数的地址,然后执行 5.至于为什么从右到左,这个我也不清楚。 不过知道这个和编译器有关就是了