运算符重载 &,有些时候函数声明在operator前有&……有时候没有……为什么?什么情况下要加什么情况不加??

如题,谢谢!

&表示返回值类型是引用
什么时候需要返回引用, 基于两点
第一是需求, 有些情况语法要求必须返回引用
比如重载=操作符, 返回引用才可写出 a1=a2=a3这样的语句
再如[]操作符, 返回引用才能实现这样的语句: a[0]=1;

第二是效率问题:
很多情况是不需要返回引用的, 比如双目的+, 可以是返回一个对象的副本, 但是返回引用比返回对象的副本效率要高, 因为返回副本最少要有两次拷贝构造被调用, 对于一个体积比较大的类来说, 时间上的开销还是要考虑的. 所以这时常用返回const引用来代替返回副本.
温馨提示:内容为网友见解,仅供参考
无其他回答

运算符重载 &,有些时候函数声明在operator前有&……有时候没有……为 ...
第一是需求, 有些情况语法要求必须返回引用 比如重载=操作符, 返回引用才可写出 a1=a2=a3这样的语句 再如[]操作符, 返回引用才能实现这样的语句: a[0]=1;第二是效率问题:很多情况是不需要返回引用的, 比如双目的+, 可以是返回一个对象的副本, 但是返回引用比返回对象的副本效率要高, 因为返回...

C++中运算符重载 &operator和operator 有&和没有&的区别是啥。。。求...
有&是引用,调用;有可能改变其后变量的值;无&,其后的变量仅仅参与运算,不会改变其值

C# 运算符重载是怎么一回事,一般哪里用,起什么作用?
1 运算符 运算符指的就是+、-、*、\/ 等此类用于算术运算的符号,这些符号在写在程序代码里面,我们的编译器可以识别出来,是因为我们已经为编译器定义好了规矩(语法),所以你会发现有些有些东西可以用+连接,而有些却不行,那是因为系统没有自定这样的规矩。2 重载 重载一个语言特性,意思就是...

c++中的重载运算符<<和>>为什么是只可以为友元函数,不可是成员函数?我...
如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。而 >> 或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。就只能申明为友元函数了。。。如果一定要声明为成员函数,只能成为如下的形式:ostream & operator<<(os...

C++重载运算符。 太TM难了。 进来看看
是正确的,因为函数f()是类A的成员。注:cout和cin都是C++中iostream类的一个对象,对于cout<<使用的<<运算符,是在类中被重载了的,因此<<运算符就是一个重载的操作运算符。将操作符重载函数声明为友元时,这时的操作符重载函数必须多一个形参,若操作符成员函数是类的成员函数,则要少一个形参...

求助,关于一道C++函数重载的问题
在函数体实现不会用到;而作为友元函数时则是写成了双目的形式:operator++(class ,int),这个跟双目运算符重载为成员函数时单形参否则双形参是一个道理的。换句话说,在重载的时候你可以把后置++看做是双目运算符,只是右操作数只是起与前置区分的标识作用而已。

C++里面,为什么重载前++时不返回引用就不能连用?
这只是一个约定,它告诉编译器递增运算符正在后缀模式下被重载。第二个区别是使用临时局部变量 temp 来获取递增之前对象的值。该值将被保存并在稍后由函数返回。返回引用才可以连用,因为引用&能使返回对象为左值,左值是分配地址的可以连续使用。如果不返回引用就是返回值为右值,不可以连续运算 ...

请教c++运算符重载程序报错原因
这可能是编译器的原因。有些低版本的编译器,除了在类中申明友元关系之外,还要在类定义前对函数进行前向声明。如:Class Time;Time& operator++(Time& a);Time operator++(Time& a,int);ostream& operator<<(ostream& o,const Time& t);如果你用的是vc6.0的话就会出现这种情况。虽然重载运算...

...符在声明和定义时都要在Time后面加&??还有为什么返回值必须是this指...
为什么要返回引用呢?其实一元运算符也有不返回引用的时候,这里重载前置自增(++)返回引用,而我们重载后自增的时候却不返回引用。可以这样重载后自增:Time Time::operator++(int){ Time t(*this); \/\/ 构造临时对象 ++*this; \/\/ 调用前置自增 return t; \/\/ } 这里就没有返回引用,而是返回一...

C++运算符重载:为什么流运算符不能重载为成员函数?
不能重载的根本原因在于,大部份的标准库实现中,对ostream,istream类体系采用了构造函数保护继承的方式。。。致使即使以继承的方式来扩展流类,也会在对象实例化时遭遇阻碍。。。另一方面,标准库中的流类,其插入符函数没有声明为虚函数,因此子类不能对其实现进行覆盖,所以也使成员函数重载遭遇到实质...

相似回答