在C++中运算符重载的时候究竟什么时候应该加引用,什么时候不应该加引用

如‘+’运算符的返回值的时候不能加引用,但是‘=’运算符返回值又要加引用。
还有就是[ ]运算符重载如:int& operator[](int ind){
data[ind];
}
为什么这个参数不能使用引用(int& ind)这个问题困扰了我很久,求大神解答,小弟谢谢了。

如果返回值会被赋值,就必须返回引用,例如=重载
如果返回值是一个局部变量,就一定不能返回引用,例如+重载
如果为了提高效率,参数可以使用引用,
而[]的实际参数经常是一个常量,常量你是无法引用,所以不能用引用作为[]的参数。
温馨提示:内容为网友见解,仅供参考
无其他回答

在C++中运算符重载的时候究竟什么时候应该加引用,什么时候不应该加引...
如果返回值会被赋值,就必须返回引用,例如=重载\\x0d\\x0a如果返回值是一个局部变量,就一定不能返回引用,例如+重载\\x0d\\x0a如果为了提高效率,参数可以使用引用,\\x0d\\x0a而[]的实际参数经常是一个常量,常量你是无法引用,所以不能用引用作为[]的参数。

C++ 中什么是引用 申请和使用引用要注意哪些问题
int card; \/\/ 集合中元素的个数。public:Set () {card=0;} \/\/构造函数 friend Set operator * (Set ,Set ) ; \/\/重载运算符号*,用于计算集合的交集 用对象作为传值参数 \/\/ friend Set operator * (Set & ,Set & ) 重载运算符号*,用于计算集合的交集 用对象的引用作为传值参数 ......

C++重载=,+=等时候为什么要用返回引用
如果不返回引用,后面对流的操作就是无效的了,因为你返回的只是某时流的一个拷备,以后对它的操作不会显示出来了。就像上面为什么我可以连用两次<<操作符?如果不是返回引用,第二次插入操作将会将b插入到那个临时的流对象,而将会显示的会是那个全局的流,所以就看不到b了。就正如我们程序开始申请一...

C++运算符重载,+-*\/的重载,返回值为什么是对象而不是对象的引用?而流操...
分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己创造运算符),这样就限定了和sum不能作为参数传入,所以sum只能是一个函数里的临时变量,但是临时变量在函数结束时是要销毁的,那么函数调用玩,sum就没有了, 如果返回引用,引用源都已经没有了,还怎么引用,...

C++中运算符重载问题,分别说明下面const的作用以及为什么要用引用
而它直接传递地址,所以这种传递比按值传递更有效.另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性, 且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙.(2)const 修饰函数返回值 const修饰函数返回值其实用的并不是很多,它的含义和...

关于C++重载运算符
(五) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾。(六) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。...

c++关于运算符重载的问题
1 char &operator[](int i);\/\/请说明此行的&是什么作用 函数的声明,防止在没有定义函数实体之前,被早先调用致使编译错误 2 char &charArray::operator[](int i)\/\/&是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。后者只是一个...

C++下标运算的重载为什么要加&
重载下标运算符一定要返回引用,因为这样才能改变下标对应元素的值 如果不返回引用 arr[1] = 1;就不会改变arr[1]的值。事实上,该语句是非法的,因为arr[1]是一个常量性质的元素,不可以赋值。

C++中为什么重载前置++运算符要加个&?
1、因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。举个例:cout<<是经常用的,其实是重载了<<这个操作符。如果不返回引用,cout<<a<<b<<endl; 就不可以一起写了。如果返回自身的引用 cout<

C++重载运算符时为什么有时候需要用&,请举个形象点的例子
因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。 赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续...

相似回答