关于&运算符的一个问题
[size=4][/size]#include<iostream.h>#include<stdlib.h>
class sometype{
int a[3];
public:
sometype(int i,int j,int k){
a[0]=i;
a[1]=j;
a[2]=k;
};
[color=Red]int &operator[](int i);[/color]
};
[color=Red]int &sometype::operator[]{[/color]
if(i<0||i>2)
{
cout<<"error"<<endl;
exit(1);
}
return a[i];
}
void main(){
sometype ob(1,2,3);
cout<<ob[1]<<endl;
ob[1]=25;
cout<<endl;
cout<<ob[1];
ob[3]=44;
}
上面代码中请问&表什么意思啊?个人认为这个“&”符号可以不加的,请高手指点
[[it] 本帖最后由 hank_wh 于 2008-7-18 21:12 编辑 [/it]]
会出现error,大概意思是右值不能赋值之类的。
你代码不完整,有些错误,就不说了,说你问题:
&在这里表示引用,即引用返回,吧&和返回值看在一起,所以返回值是int&
引用就是取地址的意思,意思是返回来的值
return a[i];
是a[i]本身,是一个左值,是可以对那块内存进行修改的。
反之,若没有&单纯的int返回的是a[i]的一个copy,是一个右值,是不能被修改的,退一万步,即使能修改,也不会影响实际的a[i]。
如果你没有左值,右值的概念,建议看书。 必须加
函数一般是这样 a=fun(b)
但是 用了&的函数可以这样
fun(a)=b.就把fun()函数的返回值(变量)赋值为b了
[[it] 本帖最后由 病书生 于 2008-7-18 22:41 编辑 [/it]]
回复 2# aipb2007 的帖子
太感谢你了!引用其实可以看作是特殊的指针,如果那个函数不是引用的话返回的是值,而值是不能再被赋值的,太谢谢你了页:
[1]
