asignar a rvalue: ¿por qué esto compila?
En el siguiente ejemplo:
class A {
private: double content;
public:
A():content(0) {}
A operator+(const A& other) {
content += other.content;
return *this;
}
void operator=(const A& other) {
content = other.content;
}
};
A
es un contenedor simple para un doble para el cual el+
y=
los operadores han sido sobrecargados. En el siguiente uso:
int main(int argc, char *argv[]) {
A a, b, c;
(a+b) = c ; // Why is this operation legal?
}
Por que(a+b) = c
¿compilar? Me gustaría saber por qué esta declaración es legal, porque el resultado de(a+b)
debe ser unrvalue
. No estoy devolviendo una referencia deoperator+
.