一、对象作为函数参数
对象作为函数参数时,其传递过程较为复杂,传递方式比较独特。其伟参数过程和数组不同。传参时不会像数组那样以首地址作为参数传递,而是先将对象中的所有数据进行备份(复制),将复制的数据作为形参传递到调用 函数中使用。
在基本的数据类型中,除又精度浮点外,其他所有数据类型在32位下都不超过4字节,使用一个栈元素即可完成数据的复制和传递。值参顺序: 最先定义的数据成员最后压栈,最后定义的数据成员最先压栈。
在对象作为函数参数时,会复制对象并传递,在某些情况下会调用 特殊的构造函数--拷贝构造函数。当函数退出时,复制的对象作为函数内的局部变量,将会被销毁。当析构函数存在时,则会调用 析构函数。
二、对象作为返回值
对象作为函数返回值时,与基本类型不同。基本类型作为返回值时,通过寄存器eax来保存返回的数据,而对象属于自定义类型,寄存器eax无法保存对象中的所有数据,所以在函数返回时,寄存吕eax不能满足要求 。
对象作为返回值与对象作为参数的处理方式非常相似。对象作为参数时,进入函数前预先将对象使用栈空间保留出来,并将实参对象中的数据复制到栈空间中。该栈空间作为函数参数,用于函数内部使用。同理,对象作为返回值时,进入函数后将申请返回对象使用的栈空间,在取出函数时,将返回对象中的数据复制到临时的栈空间中,以这个临时栈首地址作为返回值。
网友评论