关于此左值作为赋值的左操作数所需的错误

时间:2014-10-12 09:26:06

标签: c++

这是我的问题!!

for( i = 0; i <= MAX - 2; i++){
    for( j = i + 1; j <= MAX - 1; j++){
        if(stud[i].getEdad() < stud[j].getEdad()){
            temp=stud[i].getEdad();
            stud[i].getEdad() = stud[j].getEdad();
            stud[j].getEdad() = temp;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我认为问题的根源是

stud[i].getEdad() = stud[j].getEdad().

左值(定位符值)表示占据存储器中某些可识别位置的对象(即具有地址)。 rvalues由排除定义,表示每个表达式都是左值或右值。因此,从上面的左值定义来看,rvalue是一个表达式,它不代表占用内存中某些可识别位置的对象

如上所述,赋值期望左值作为左操作数,即

//Here foo returns a reference i.e lvalue so ther's no problem in below code.
int& foo()
{
    return globalvar;
}

int main()
{
    foo() = 10;
    return 0;
}

//whereas following one will give you an error since return value is just a temporary object and you are assigning to it.
int foo()
{
    return globalvar;
}

int main()
{
    foo() = 10;
    return 0;
}