构造函数问题

[复制链接]
1514|4
 楼主| hsbjb 发表于 2013-8-27 19:15 | 显示全部楼层 |阅读模式
网上说这个函数的运行会调用拷贝构造函数  但是为什么运行后 copy 这个字符串不会打印  也就是说没有调用拷贝构造函数吗?
class CExample
{
private:
int a;

public:
//构造函数
CExample(int b)
{
  a = b;
}

//拷贝构造
CExample(const CExample& C)
{
  a = C.a;
  cout<<"copy"<<endl;
}

     void Show ()
     {
         cout<<a<<endl;
     }
};

//全局函数
CExample g_Fun()
{
CExample temp(0);
return temp;
}

int main()
{
g_Fun();
return 0;
}
火箭球迷 发表于 2013-8-27 19:36 | 显示全部楼层
你这里没有拷贝,当然不会输出copy了
xsgy123 发表于 2013-8-27 19:51 | 显示全部楼层
这种情况是标准允许的返回值优化,直接把函数体内返回的对象当成外面被返回的对象再用了
sinadz 发表于 2013-8-27 20:05 | 显示全部楼层
标准规定的东西通过调试是看不到的。调试只能反映出你手上拿到的编译器的具体行为,但是编译器本身却不会告诉你它为什么要设计成具有这样的行为。这些你只能找到原始的标准文档才能知道。毕竟不同厂商的编译器都得按照标准文档的要求去设计。编译器要和标准规定的行为相一致,而不是标准根据某家编译器的具体行为编写出来的。
dfsa 发表于 2013-8-28 19:18 | 显示全部楼层
没太看明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则

193

主题

2354

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部