Whiteflags; it seems like it is an rvalue, but, as phantomotap pointed out, it is legal to change an rvalue.
Consider this class for example:
Rational.h
Code:
class Rational {
public:
Rational();
Rational(int nominator);
Rational(int nominator, int denominator);
Rational operator*(const Rational& rhs);
virtual ~Rational();
private:
int m_nominator;
int m_denominator;
};
Rational.c
Code:
#include "Rational.h"
// more implamentation here...
Rational Rational::operator *(const Rational& rhs) {
return Rational((m_nominator*rhs.m_nominator),(m_denominator*rhs.m_denominator));
}
So now, the compiler will allow this:
Code:
int main() {
Rational a,b,c;
(a*b)=c;
}
But when I try to bind the return value to a reference (I know it's basically wrong, but I'm doing it for testing purposes) like this:
Rational.h
Code:
class Rational {
public:
Rational();
Rational(int nominator);
Rational(int nominator, int denominator);
Rational& operator*(const Rational& rhs);
virtual ~Rational();
private:
int m_nominator;
int m_denominator;
};
Rational.c
Code:
#include "Rational.h"
// more implamentation here...
Rational& Rational::operator *(const Rational& rhs) {
return Rational((m_nominator*rhs.m_nominator),(m_denominator*rhs.m_denominator));
}
I get:
error: invalid initialization of non-const reference of type ‘Rational&’ from an rvalue of type ‘Rational’