El compilador tratará lo retornado como const, chequeando cada vez para que no pueda utilizarse en lugares donde una const no es aceptada.
Esto no impide modificar usando lo retornado por ese metodo. Esta dejando la puerta abierta para hacerlo. Por ejemplo:
Código C++:
Ver original#include <iostream>
using namespace std;
class M {
int x;
public:
M() : x(0) {}
const int& f() { return x; }
void printme() { cout << x << endl; }
};
int main()
{
M m;
m.printme();
// m.f() = 3; // ERROR de compilacion
*((int *)&m.f()) = 3;
m.printme();
return 0;
}