C++愤恨者札记2——函数返回值为类对象

C++愤恨者札记2——函数返回值为类对象

    为避免冗余代码,程序使用Release配置编译,但要把/Od选项打上,否则编译器优化,会使用代码很难懂。

    当函数返回值是基本的数据类型(如,int,char)时,会把返回结果放在eax上,这样函数调用者就可以通过eax获得函数返回结果了。但如果返回值是一个类对象呢?eax根本不够用了。

实验源码:

class Node
{
public:Node(){}//Node(Node& n){}int data1;int data2;int data3;
};Node Fn()
{Node n;n.data1 = 100;    return n;
}void main()
{Fn();
}

----------------------------------------------------------------------

    调用者处理过程。main将会在栈上为Fn分配临时空间,大小为其返回对象尺寸,代码没有优化的前提下,Fn出现一次会分配一份,出现两次则两份,依此类推。可以把"Fn ();"复制几次试试。调用Fn时,为Fn分配的临时空间的地址将压栈,Fn内部将使用这个地址来存放返回结果。

hello!main: