注册 登录
编程论坛 C++教室

关于&运算符的一个问题

hank_wh 发布于 2008-07-18 21:08, 640 次点击
#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;
    };
    int &operator[](int i);
};
         int &sometype::operator[]{
    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]]
3 回复
#2
aipb20072008-07-18 22:37
你觉得可以不加,那你就不加&再编译次试试。
会出现error,大概意思是右值不能赋值之类的。

你代码不完整,有些错误,就不说了,说你问题:
&在这里表示引用,即引用返回,吧&和返回值看在一起,所以返回值是int&
引用就是取地址的意思,意思是返回来的值
return a[i];
是a[i]本身,是一个左值,是可以对那块内存进行修改的。
反之,若没有&单纯的int返回的是a[i]的一个copy,是一个右值,是不能被修改的,退一万步,即使能修改,也不会影响实际的a[i]。

如果你没有左值,右值的概念,建议看书。
#3
病书生2008-07-18 22:39
必须加
函数一般是这样 a=fun(b)
但是 用了&的函数可以这样
fun(a)=b.就把fun()函数的返回值(变量)赋值为b了

[[it] 本帖最后由 病书生 于 2008-7-18 22:41 编辑 [/it]]
#4
hank_wh2008-07-19 14:19
回复 2# aipb2007 的帖子
太感谢你了!引用其实可以看作是特殊的指针,如果那个函数不是引用的话返回的是值,而值是不能再被赋值的,太谢谢你了
1