函数返回值为自定义的类型与引用类型的区别
来源:互联网 发布:mac 它来自身份不明 编辑:程序博客网 时间:2024/05/22 15:13
#include<iostream>
#include<string>
#include<fstream>
using
namespace
std;
ofstream out(
"test.out"
);
class
A
{
public
:
string id;
A(string iid=
""
):id(iid){out<<
"A(),iid="
<<iid<<endl;}
A(
const
A& a) {id=a.id+
"copy"
;out<<
"A(const A& a),iid="
<<id<<endl;}
A& operator=(
const
A& rv)
{
id=rv.id;
return
*
this
;
}
A f1(){
return
*
this
;}
A& f2(){
return
*
this
;}
A& f3(){A* pb=
new
A;
return
*pb;}
};
A& f()
{
A a(
"a"
);
cout<<
"in f():"
<<&a<<endl;
return
a;
}
int
main()
{
A a(
"a"
);
cout<<
"&a:"
<<&a<<endl;
cout<<
"f1():"
<<&(a.f1())<<endl;
cout<<
"f2():"
<<&(a.f2())<<endl;
A b=a.f2();
cout<<
"&b:"
<<&b<<endl;
cout<<
"f3():"
<<&(a.f3())<<endl;
cout<<
"in main f():"
<<&(f())<<endl;
return
0;
}
从输出可以看出:
对象a的起始地址与函数f2()的返回值地址相同,f2()的返回为引用;
对象b的地址与对象a的地址不同,两个对象在内存中占有独立的空间,利用返回的引用类型初始化b,而不是在内存中再生成一个a对象的副本,然后再初始化b;
对象a的起始地址与函数f1()的返回值地址不相同,f1()的返回不是引用,在内存中生成了一个对象a的副本;
函数f()返回局部对象的引用是会有警告的,因为函数返回后,局部变量的内存将被释放,选用这个例子只是为了测试编译器在返回是临时对象的引用时是怎样处理的。可以看出,即使是返回一个临时对象的引用,编译器也不会为了确保安全而生成一个临时对象返回。
0 0
- 函数返回值为自定义的类型与引用类型的区别
- C++中函数返回值的引用类型与非引用类型的区别
- C++ 返回值类型与引用类型的区别
- 引用之函数返回值 函数的返回值为引用类型《三》
- 值类型与引用类型的区别
- 值类型与引用类型的区别
- 值类型与引用类型的区别
- 值类型与引用类型的区别
- 值类型与引用类型的区别
- 值类型与引用类型的区别!!
- 值类型与引用类型的区别
- 值类型与引用类型的区别
- 值类型与引用类型的区别
- 值类型与引用类型的区别
- 返回引用类型的函数
- 函数返回引用类型的值
- 函数有返回值且返回值为引用类型的问题返回null
- 极限研究-"&"函数返回引用与返回普通类型的区别
- R语言数据对象与运算
- SQL 多表条件查询完成 将超出警戒线的机器向相关人员发出告警
- 自旋锁应用
- OpenDaylight实战手记(五)源代码研读
- 对待SEO,我们的态度要有所改变!
- 函数返回值为自定义的类型与引用类型的区别
- Google研制智能隐形眼镜 帮助病人监测血糖指标
- 关于用extern定义函数的一个问题
- 半年android开发,自己收集的一些很实用的东西
- 遇忙前转
- Javascript去除回车换行符号和PHP去除回车换行符的方法
- Centos搭建SVN服务器三步曲
- MVC如何配置才能访问静态页面
- 【Apache Storm系列之五】Stream Grouping:不同组件之间的tuples传递