函数返回引用的注意事项
来源:互联网 发布:淘宝网店域名怎么改 编辑:程序博客网 时间:2024/06/09 12:34
转载
http://baimafujinji.blog.51cto.com/907111/195792
引用作为函数的返回值时,函数的返回值可以理解为函数返回了一个变量(事实上,函数返回引用时,它返回的是一个指向返回值的隐式指针),因此,值为引用的函数可以用作赋值运算符的左操作数。另外,用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。
- #include<iostream>
- using namespace std;
- int &func()
- {
- static int num = 0;
- return ++num;
- }
- int main()
- {
- int i;
- for(i=0; i<5; i++)
- cout<<func()<<'\t';
- cout<<endl;
- func()=10;
- for(i=0; i<5; i++)
- cout<<func()<<'\t';
- cout<<endl;
- }
- /*
- $ g++ -o test test1.cpp
- $ ./test
- 1 2 3 4 5
- 11 12 13 14 15
- */
不能返回函数内部动态分配的内存的引用。虽然不存在局部变量的被动销毁的问题,但是在此种情况下,仍然存在一些问题。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的由new分配的空间就无法被释放,从而造成内存泄漏问题。
举例如下:
$ g++ -o test2 test2.cpp
test2.cpp: In function ‘int*& fun()’:
test2.cpp:8:7: warning: reference to local variable ‘p’ returned [-Wreturn-local-addr]
int *p = new int(1);
^
举例如下:
- #include <iostream>
- int *& fun()
- {
- int *p = new int(1);
- return p;
- }
- int main()
- {
- int *a;
- a = fun();
- }
$ g++ -o test2 test2.cpp
test2.cpp: In function ‘int*& fun()’:
test2.cpp:8:7: warning: reference to local variable ‘p’ returned [-Wreturn-local-addr]
int *p = new int(1);
^
最后,可以返回类成员的引用,但最好是const常量。这是因为当对象的属性是与某种业务规则相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,于是有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用,那么对该属性的单纯赋值就会破坏业务规则的完整性。
0 0
- 函数返回引用的注意事项
- 探讨:C++中函数返回引用的注意事项
- 返回引用的函数
- 函数的引用返回
- 函数的引用返回
- 函数的返回引用
- 函数的引用返回
- 返回引用的函数
- 引用作为返回值的注意事项
- 函数返回引用的含义
- 函数的引用返回值
- 返回引用类型的函数
- 函数的引用返回值
- php函数的引用返回
- C++函数的返回引用
- C++函数的返回引用
- php函数的引用返回
- C++函数的返回引用
- FZU2184 逆序数还原
- 每天学习一点新东西——vim篇(二)
- Enum类型
- Zookeeper(一)安装
- C语言中的数组与指针的关系
- 函数返回引用的注意事项
- iOS第三天认识及了解注意
- LeetCode 合并k个有序链表
- USACO Ski Course Design(枚举)
- 剑指off-反转链表
- UGO权限问题
- spring junit 做单元测试,报 Failed to load ApplicationContext 错误。
- some record in matlab code
- POJ 2676 Sudoku