首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

函数回来一个类对象,用该对象创建另一个对象。结果有点意外

2012-07-31 
函数返回一个类对象,用该对象创建另一个对象。结果有点意外C/C++ codeclass Exmpl{public:Exmpl(){coutE

函数返回一个类对象,用该对象创建另一个对象。结果有点意外

C/C++ code
class Exmpl{public:    Exmpl(){cout<<"Exmpl()"<<endl;}    Exmpl(const Exmpl&){cout<<"Exmpl(const Exmpl&)"<<endl;}    Exmpl& operator=(const Exmpl& rhs)    {        cout<<"operator=(const Exmpl& rhs"<<endl;        return *this;    }    ~Exmpl(){cout<<"~Exmpl()"<<endl;}};Exmpl getE(){    return Exmpl();}Exmpl e2 = getE();

运行最后一句,为什么只输出“Exmpl()”?我以为程序会这样运行:在getE函数里,创建一个局部Exmpl对象,然后返回这个局部对象的副本,然后用复制构造函数创建返回值副本的Exmpl对象,然后再析构返回值副本对象。这样程序就应该输出:
Exmpl()
Exmpl(const Exmpl&)
~Exmpl()

[解决办法]
返回值优化
[解决办法]
编译器优化了。

你将getE()改成下面这样试试:
C/C++ code
Exmpl getE(){    Exmpl a;    return a;} 

热点排行