El cast en C tiene mucha precedencia. Le dice al compilador las intenciones del programador.
De a poco:
&x -> direccion de memoria de x
(int *) expresion -> no importa lo que expresion sea, tratese como (int *) (adios const, si es que lo habia)
* puntero -> desreferenciacion de puntero
Código Para que quede como tabla ...:
Ver originalm.f() -> const int & -> la referencia
&m.f() -> & ( const int & ) -> la direccion de memoria de ella
(int*) &m.f() -> (int *) -> tratese como int *
* ( int * ) -> int -> desreferenciarlo