effective c++ ------不要返回指向局部对象指针或引用,该返回对象就返回对象.
来源:互联网 发布:万网域名控制面板登录 编辑:程序博客网 时间:2024/06/05 20:31
首先我们来看一个例子:
#include <iostream>using namespace std;const int &fun1(int a,int b){int i=0;i = a + b;return i;}int main(){if (fun1(1, 2) == fun1(2, 5)){cout << fun1(1, 2) << endl;cout << fun1(2, 5) << endl;cout << "sb" << endl;}elsecout << "bushisb" << endl;}
请看为什么if语句里面的条件为真呢?这里我可以告诉大家,不管当传递给a b的值如何变化,if语句永远为真,当时输出值为什么不相等呢?
分析:函数fun1返回的是局部对象引用,这个对象函数推出前local对象i已经被销毁,其返回的引用永远指向一个过时的i。所以if语句里面的条件永远为真。
再来看一个列子:
class A{ };
const A operator*(const c A& a1,const A& a2);
这个operator*是以by value 返回方式返回其计算结果,有人想改为传递reference方式已达到不需要付出任何代价去传值:
const A& operator*(const c A& a1,const A& a2);
分析:记住,所谓reference只是个名称,代表某个既有的对象,任何时候看到一个reference声明的方式,你都应该立刻问自己,它的另外一个名称是什么?因为它是一定是某物的另一个名称。如果他返回一个引用,那么返回一个指向某个既有的对象.
A a(1,2);
A b(3,5);
A c=a*b; 如果返回引用,那么c得到的值是原本就存在的值,而不是通过a*b得到的。
请记住:不管局部对象是何种类型,都不要使用 引用和 指针返回这个局部对象。
0 0
- effective c++ ------不要返回指向局部对象指针或引用,该返回对象就返回对象.
- 不要返回局部对象的引用或指针
- Effective C++——必须返回对象时,别妄想返回其引用或指针
- 不要返回局部对象的引用
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用 (转自effective c++ second edition)
- Effective C++ 条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用
- 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用
- 不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用
- 【Effective C++】必须返回对象时,别妄想返回引用
- 返回局部对象的引用和返回局部对象的指针
- effective C++笔记之条款31、32: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针所指对象的引用、尽可能地推迟变量的定义
- Effective C++ Item 28 避免返回对象内部数据的引用或指针
- 返回指向const对象的引用
- Effective C++(10) 重载赋值操作符时,返回该对象的引用(retrun *this)
- Effective C++学习笔记:必须返回一个对象时不要试图返回一个引用
- effective c++ 条款23: 必须返回一个对象时不要试图返回一个引用
- 802.11速率计算
- javascript中的正则表达式(来自W3C)
- 给Eclipse提速的7个技巧
- Ryu eventlet学习总结
- kali-linux VPN设置
- effective c++ ------不要返回指向局部对象指针或引用,该返回对象就返回对象.
- 异步提交上传图片(ajaxSubmit)
- opencv学习之二:运用camshift进行红外视频跟踪。
- mysql union, union all合并两个结果集
- FCM算发在MATLAB中的相关解释
- 华为机试—元素按奇偶排序 (金字塔)
- Valid Parentheses -- leetcode
- Binary Tree Inorder Traversal
- 游泳