Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Declaracion const

Estas en el tema de Declaracion const en el foro de C/C++ en Foros del Web. Hola, me pregunto no se pueden hacer expresiones del tipo: int& obtenerTamanio () const{ ... } Supongo que será porque al devolver " int& " ...
  #1 (permalink)  
Antiguo 06/08/2011, 09:21
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 8 años, 8 meses
Puntos: 3
Declaracion const

Hola, me pregunto no se pueden hacer expresiones del tipo:

int& obtenerTamanio () const{

...

}

Supongo que será porque al devolver " int& " luego si el objeto no es const se podría modificar en otro sitio de la funcion, pero me extraña que sea asi porque en realidad ese "const" que tengo expresado funciona para que el objeto que le pase no se modifique no ?

Un saludo!
  #2 (permalink)  
Antiguo 06/08/2011, 10:38
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 11 años, 5 meses
Puntos: 61
Respuesta: Declaracion const

El real asunto es a quien le quieres aplicar el modificador "const".
Las opciones son si se lo quieres aplicar al dato retornado o a la funcion.

Si se lo quieres aplicar al valor o referencia retornada, la sintaxis es

const int& f()
{
}

Aplicarselo a la funcion no tiene sentido. Si tiene sentido aplicarselo a un metodo no static. En ese caso significa que tu funcion se compromete a no modificar los miembros de la clase y hace que el compilador chequee mas cosas, respecto a la implementacion y respecto a quien puede validamente invocar el metodo.
  #3 (permalink)  
Antiguo 06/08/2011, 11:08
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 8 años, 8 meses
Puntos: 3
Respuesta: Declaracion const

Pero la funcion debería de llamarse const si no va a modificar datos, o me equivoco ?? un objeto const no puede interactuar con una funcion no const, no?
  #4 (permalink)  
Antiguo 06/08/2011, 11:39
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 11 años, 5 meses
Puntos: 61
Respuesta: Declaracion const

Las funciones no pueden tener el apellido const.
Los datos que modifican o no son los parametros y es elli donde se especifica el const.
  #5 (permalink)  
Antiguo 06/08/2011, 13:18
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 8 años, 8 meses
Puntos: 3
Respuesta: Declaracion const

Pero tu puedes escribir esto:

int& obtenerTamanio () const {

...

}

en una funcion de una clase... asi declaras que el objeto que recibe es constante...
  #6 (permalink)  
Antiguo 06/08/2011, 14:40
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 11 años, 5 meses
Puntos: 61
Respuesta: Declaracion const

Las "funciones de una clase" son los "metodos", caso que inclui previamente como valido de marcar con const, siempre que no sea static. Desde ese punto de vista, tienes razon.

Claro que la explicacion que das no es tan cierta, o es al menos es un tanto confusa para mi.

Indicar que un metodo es const no es declarar que "el objeto que recibe es constante", de hecho no se a que te refieres con "el objeto que recibe", (a menos que te refieres al parametro oculto "this" ?)

Desde el punto de vista conceptual, un metodo (no static) se entiende que esta asociado a un objeto, el que tiene un estado, y el marcar un metodo como const indica que ese metodo no cambiara el estado del objeto.

No se si esta explicacion es aun mas confusa por la cantidad de terminologia que usa
  #7 (permalink)  
Antiguo 06/08/2011, 15:47
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 8 años, 8 meses
Puntos: 3
Respuesta: Declaracion const

Sisi, te entiendo, ahí está lo que quería preguntar. Por qué si declaras un método:

int& obtieneTmanaio () const ...

no funciona? la función dice que el objeto no cambia el estado pero no te deja por el &?
  #8 (permalink)  
Antiguo 06/08/2011, 16:23
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 11 años, 5 meses
Puntos: 61
Respuesta: Declaracion const

Aqui un ejemplo que compila, usando la misma firma que dices que no compila.

Código C++:
Ver original
  1. class X
  2. {
  3.     int& f() const
  4.     {
  5.         int* p = new int;
  6.         return *p;
  7.     }
  8. };

Marcar un metodo const hace que el compilador haga const a todos los miembros, con ello puede generar errores de compilacion, cuando detecta inconsistencias entre la firma y lo que retornas, o la firma y lo que haces dentro del metodo. El problema esta en lo que haces, no en la firma. La firma es valida.

p.s.: El ejemplo es tambien un ejemplo de mal estilo. No lo haga usted en casa.
  #9 (permalink)  
Antiguo 06/08/2011, 17:03
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 8 años, 8 meses
Puntos: 3
Respuesta: Declaracion const

Tienes razón :S no sé de donde saqué eso....

Etiquetas: const, declaracion, funcion, metodo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:38.