Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/02/2014, 11:12
Avatar de patilanz
patilanz
 
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 13 años
Puntos: 29
Respuesta: Devolvcion por referencia o normalmente

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class M {
  5.   int x;
  6. public:
  7.   M() : x(0) {}
  8.   const int& f() { return x; }
  9.   void printme() { cout << x << endl; }
  10. };
  11.  
  12. int main()
  13. {
  14.    M m;
  15.    m.printme();
  16.    // m.f() = 3;  // ERROR de compilacion
  17.    *((int *)&m.f()) = 3;
  18.    m.printme();
  19.    return 0;
  20. }
Hola gracias por la respuesta pero no he entendido muy bien esto:
*((int *)&m.f()) = 3;

Convierte la la referencia constante en un puntero no constante ?

Ya que esto int * convierte la direccion de la referencia constante devuelta por la funcion miembro y luego esto que hace *(lo demas) ??
Creo que me he liado un poco con esta linea.

Saludos