博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 引用返回值
阅读量:5037 次
发布时间:2019-06-12

本文共 1524 字,大约阅读时间需要 5 分钟。

#include
#include
#include
using namespace std;class MyClass{public: static int num; int data; void DisplayData() { cout<<"Initializion"<
<<"\n"; } MyClass() { cout<<"MyClass Create\n"; num++; } MyClass(const MyClass& r) { data=r.data; cout<<"MyClass Copy Create\n"; num++; } ~MyClass() { num--; cout<<"MyClass Dispose\n"; } MyClass operator=(const MyClass& r) { cout<<"operator=\n"; return *this; }};int MyClass::num=0;MyClass MakeClass1(){ MyClass P; P.data=10; return P;}void Test(){ MyClass temp1=MakeClass1();//用返回值初始化变量 MyClass &temp=MakeClass1(); temp.DisplayData(); //根据C++标准,临时变量或对象在一个完整语句表达式后便宣告结束 //某些编译器对C++进行了扩展,如果临时变量或对象作为引用初始化时,则其生命期与该引用一致 //所以定义temp或者 &temp的结果一样,但是这样依赖编译器实现,最好应该: //MyClass x=MakeClass1(); //MyClass & temp=x;}MyClass& MakeClass2(){ MyClass P; P.data=10; return P;}void Test2(){ //MyClass temp1=MakeClass2();//调用拷贝构造函数 //temp1.DisplayData();//10 MyClass &temp=MakeClass2();//调用正确,原因和Test1中一样,但不推荐使用 temp.DisplayData();//10}void Test3(){ //=重载返回类型测试,=重载一般用引用返回,以免多调用一次拷贝构造函数 MyClass c1; MyClass c2; MyClass c3; c1=c2=c3;}int main(int cnt,char *argv[]){ //Test(); //Test2(); Test3(); cout<
<

觉得一般来说,函数返回值除了等号重载,最好不要用引用返回,以免带来不必要的复杂

转载于:https://www.cnblogs.com/FlyCat/archive/2012/12/29/2838859.html

你可能感兴趣的文章
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>
photoplus
查看>>
Python 拓展之推导式
查看>>
[Leetcode] DP-- 474. Ones and Zeroes
查看>>
80X86寄存器详解<转载>
查看>>
c# aop讲解
查看>>
iterable与iterator
查看>>
返回顶部(动画)
查看>>
webpack+react+antd 单页面应用实例
查看>>
Confluence 6 SQL Server 数据库驱动修改
查看>>
Confluence 6 通过 SSL 或 HTTPS 运行 - 备注和问题解决
查看>>
【47.76%】【Round #380B】Spotlights
查看>>
Git(使用码云)
查看>>
分享Java web 开发必游之路
查看>>
IIS初始化(预加载),解决第一次访问慢,程序池被回收问题(转载)
查看>>
Bean的Scope
查看>>
【BZOJ】3142: [Hnoi2013]数列
查看>>
http初探
查看>>