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

求老师解释一下C++代码的结果,该怎么处理

2013-12-02 
求老师解释一下C++代码的结果#include iostreamusing namespace stdclass A{public:A(){cout构造函

求老师解释一下C++代码的结果
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"构造函数运行\n";} 
A(A&t){cout<<"拷贝构造函数运行\n";}
~A(){cout<<"析构造函数运行\n";}
};
A func()
{
A aa;
return aa;
}

void main()
{
A a; 
A b=func();
}
 
构造函数运行
构造函数运行
拷贝构造函数运行
析构造函数运行
析构造函数运行
析构造函数运行
 
运行结果的拷贝构造函数是那一句所导致的?
是main里面的赋值语句  还是func函数返回aa时的副本?
若果A b=func();改成func();结果一致。
说明A b=func();赋值时没有调用拷贝构造函数,那么为什么将其换成简单的A b=a;会有拷贝构造函数?
[解决办法]
A b=a;会调用拷贝构造函数
[解决办法]
一个对象以值传递的方式从函数返回的时候会调用拷贝构造函数,你的func在return aa的时候调用了拷贝构造函数!并不是在A b=func();的时候!
[解决办法]
A b=func();
如果你的教材告诉你这叫赋值,那直接扔了换本合格的教材。

[解决办法]
貌似编译器进行了返回值优化,没有任何优化的情况下,应该是两次拷贝构造函数,一次是func中return aa;对局部栈对象aa拷贝构造一个临时对象进行返回,第二次是A b=func();用刚才的临时对象拷贝构造出b,编译器优化掉了临时对象的拷贝构造过程

热点排行