返回对象和返回引用

  如果方法或函数要返回局部变量,就应该返回引用,而不是指向对象的引用(这里如果返回引用,会因为局部变量被释放,指向一个无意义的对象而出错)。在这种情况下,将无可避免地使用复制构造函数来生成返回的对象。如果方法或函数要返回一个没有公有复制构造函数的类(如ostream)的对象,它必须返回一个指向这种对象的引用。最后有些方法和函数(如重载的赋值运算符)可以返回对象,也可以返回指向对象的引用,在这种情况下,应该首选引用,因为它的效率更高。

原文地址:https://www.cnblogs.com/syne-cllf/p/9246570.html

时间: 2024-11-07 19:35:27

返回对象和返回引用的相关文章

C++基础知识(八)---函数返回值(返回值,返回指针,返回对象,返回引用)---引用---复制构造函数(拷贝构造函数)

一.函数返回值 1.返回值: int test () { int a=1; return a; } 返回值时最简单的方式,它的操作主要在栈上,变量a在函数结束后会删除,为了返回a的值,系统会在内部建立一个临时变量保存a的值,以返回给调用该函数的表达式,调用结束后变量便不再存在.如果a是简单地数据类型也无所谓,不是很占用内存,如果a是大的自定义类型的数据,那么对a的复制将会占用比较大的内存.函数返回值是右值,不能进行运算符操作. 2.返回指针: int *test2() { int *b=new

函数绝对的不要返回指向局部对象指针或引用,该返回对象就返回对象。

首先我们来看一个例子: #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

Item 21:需要返回对象时,不要返回引用 Effective C++笔记

Item 21: Don't try to return a reference when you must return an object Item 20中提到,多数情况下传引用比传值更好.追求这一点是好的,但千万别返回空的引用或指针. 一个典型的场景如下: class Rational{ int n, d; public: Raitonal(int numerator=0, int denominator=1); }; // 返回值为什么是const请参考Item 3 friend con

条款21:必须返回对象时,别妄想返回其reference

条款21:必须返回对象时,别妄想返回其reference 引用只是对象的一种别名当使用引用的时候,请确认他的另一个身份在哪? class Rational { public: Rational(int x, int y) : m_x(x), m_y(y){} //返回const是属于类型保护,friend修饰,以后条款详说 friend const Rational operator + (const Rational &lhs, const Rational &rhs) { Ration

转:C++中临时对象及返回值优化

http://www.cnblogs.com/xkfz007/articles/2506022.html 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象. 通常出现在以下两种情况: (1)为了使函数调用成功而进行隐式类型转换的时候. 传递某对象给一个函数,而其类型与函数的形参类型不同时,如果可以通过隐式转化的话可以使函数调用成功,那么此时会通过构造函数生成一个临时对象,当函数返回时临时对象即自动销毁.如下例: //计算字符ch

Effective C++:条款21:必须返回对象时别妄想返回其reference

(一) 一定要避免传递一些references去指向其实并不存在的对象. 看下面这个类: class Rational { public: Rational(int numerator = 0, int denominator = 1); private: int n, d; friend const Rational operator*(const Rational& lhs, const Rational& rhs); }; 这个函数不能返回引用, (二)在stack中分配local对

(转)C++中返回对象的情形及RVO

http://www.cnblogs.com/xkfz007/archive/2012/07/21/2602110.html 之前有文章介绍过临时对象和返回值优化RVO方面的问题.见此处. 在C++中,返回对象这一点经常被诟病,因为这个地方的效率比较低,需要进行很多的操作,生成一些临时对象,如果对象比较大的会就会比较耗时.但是在编译器实现的时候,经常是对返回对象的情况进行优化,也就是进行返回值优化 . 在g++中,这个是默认已经进行了优化.以前我希望看看到底C++怎么操作的,但是无法看到,就是因

[转] C++中临时对象及返回值优化

http://www.cnblogs.com/xkfz007/articles/2506022.html 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象. 通常出现在以下两种情况: (1)为了使函数调用成功而进行隐式类型转换的时候. 传递某对象给一个函数,而其类型与函数的形参类型不同时,如果可以通过隐式转化的话可以使函数调用成功,那么此时会通过构造函数生成一个临时对象,当函数返回时临时对象即自动销毁.如下例: //计算字符ch

[021]必须返回对象时,别妄想返回其reference

引言 在条目20中,我们知道了值传递和引用传递的效率问题,因此在设计程序时,我们可能就尽可能来返回引用而不是值. 可是,可能会犯下面的一些错误:传递一些引用指向其实并不存在的对象. 第一节:返回临时变量的引用 假如我们有以下的例子,先看值传递 1 class A { 2 public: 3 A(int n = 0, int d = 1):n(n),d(d) {} 4 private: 5 int n,d; 6 friend const A operator* (const A& l, const