读书人

函数返回值为一个类解决办法

发布时间: 2012-03-01 10:25:46 作者: rapoo

函数返回值为一个类

class Sample
{

int val;

std::string name;

public:

Sample(int data, std::string str):val(data),name(str){}
};

Sample fun()
{
Sample tmp(2,"xxx");
return tmp;

}

int main()
{



fun();

return 0;
}





fun();
00C0174E lea eax,[ebp-0E8h]
00C01754 push eax
00C01755 call fun (0C01159h)
00C0175A add esp,4
00C0175D lea ecx,[ebp-0E8h]
00C01763 call Sample::~Sample (0C01154h)



call fun 这一句前有一个push eax, 一般而言,call前 把一些值压到栈中,是做参数,,,,

fun这个函数是没有参数的啊??

lea eax,[ebp-0e8h] 这一句, 取某个变量的地址, main 函数中没有变量啊。。。。




[解决办法]
不好意思,没有细看。

只不过对于你的问题不同编译器及编译平台是有不同答案的,完全取决于编译器怎么做。

如果使用汇编语言,有很多种方案。
[解决办法]

探讨非常感谢你的回复, 不过这个帖子其实不是 问;关于编译器有话的问题而是
讨论,为什么会讲一个main中的对象的地址,放到栈中。。。。
引用:
这里有一个返回值优化的问题~~
参考ISO/IEC 14882:2003(E) 12.8 Copying class objects 中的15条款

读书人网 >C++

热点推荐