Muchas gracias 
Tiene sentido si se toma "Foo const& f" como referencia a Foo constante, all llamar a algun metodo de f, es posible que este modifique el objeto.
Entonces, "const Foo& f" es lo mismo que "Foo const& f"?
Hay alguna manera de hacer "constante referencia a Foo" y no "referencia a Foo constante"?
Me refiero a :
Es decir, que se pueda cambiar los miembros de la referencia, pero no la referencia.
PD, creo que correctamente seria asi el la sobrecarga de +?
Y tambien, + tendria que devolver objeto nuevo mientras que += referencia al objeto?
Saludos y Gracias.

Tiene sentido si se toma "Foo const& f" como referencia a Foo constante, all llamar a algun metodo de f, es posible que este modifique el objeto.
Entonces, "const Foo& f" es lo mismo que "Foo const& f"?
Hay alguna manera de hacer "constante referencia a Foo" y no "referencia a Foo constante"?
Me refiero a :
Código (cpp) [Seleccionar]
void f(foo "referencia constante a" f){
f = foo(); //error, f referenciaria otro objeto
f.set(valor); //ok, f sigue referenciando a f pero con un miembro cambiado de valor.
}
Es decir, que se pueda cambiar los miembros de la referencia, pero no la referencia.
PD, creo que correctamente seria asi el la sobrecarga de +?
Código (cpp) [Seleccionar]
Foo operator+(const Foo& f)
{
Foo b;
b.bar_ = this->bar_ + f.bar_;
return b;
}
Y tambien, + tendria que devolver objeto nuevo mientras que += referencia al objeto?
Código (cpp) [Seleccionar]
Foo operator+(const Foo& f);
Foo& operator+=(Foo const& f);
Saludos y Gracias.