• Miércoles 20 de Noviembre de 2024, 10:11

Autor Tema:  duda sobre este código y const?  (Leído 1217 veces)

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
duda sobre este código y const?
« en: Miércoles 11 de Noviembre de 2009, 13:41 »
0
Hola, quiero que me digan porque me sale este warning y porque deberia cambiar a const en la entrada de parámetros,es decir yo tengo el siguiente método:

Código: C++
  1.  
  2. //modifico el color
  3. void TPoro::Color(char *col){
  4.  
  5.  
  6.     if(color!=NULL){
  7.             delete []color;
  8.             color=NULL;
  9.     }
  10.        
  11.     if(col!=NULL){
  12.             color=new char[strlen(col)+1];
  13.             Convertir(col,color);      
  14.            
  15.     }
  16.     else color=NULL;
  17.  
  18. }
  19.  
  20.  
  21.  

su prototipo es void Color(char *);

teniendo esto me sale siempre un aviso que me dice;
aviso: conversión obsoleta de una constante de cadena a ‘char*'

me han comentado que dicho método lo tendría que poner como
void Color(const char*);

porque? esa funcion solo debe de cambiar el color de un poro(que es el objeto), y yo en mi main lo probaria de la siguiente manera:

Código: C++
  1.  
  2.  
  3. int main(){
  4.  
  5. TPoro c1(5,6,25.58,"RED");
  6.  
  7. }
  8.  
  9.  
  10.  

porque debo cambiarlo a const, es por el compilador, uso la version 4.3.3 de g++.

Espero respuesta.
Gracias.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: duda sobre este código y const?
« Respuesta #1 en: Miércoles 11 de Noviembre de 2009, 20:36 »
0
Es la forma correcta de hacerlo. Si no vas a cambiar la información apuntada tienes que definirlo de esa forma, de lo contrario das lugar a malas interpretaciones.

Si alguien que no tiene a mano la implementación y usa esa función para garantizar que esa información apuntada por col no sea modificada debería crear una copia, haciendo el código menos eficiente (y de hecho reservar y liberar memoria dinámicamente son operaciones que consumen muchísimo tiempo de CPU, comparadas con operaciones matemáticas, lógicas, control de flujo, etc). Teniendo "const char *col" le garantiza que no necesita hacer la copia por que esos datos no serán modificados.

Incluso si quisieras que el compilador te avise si por accidente estás modificando el puntero para que apunte a otro dato sería bueno que pongas
"const char * const col".

Evidentemente esto no es 100% seguro por que es posible usar casting para quitar el "const", pero lo anterior sólo se debería hacer en caso que necesitemos pasar col como parámetro a otra función que no fue bien definida pero de la que estamos seguros que no modifica los datos apuntados por col, es decir similar a la que posteaste.

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: duda sobre este código y const?
« Respuesta #2 en: Martes 17 de Noviembre de 2009, 11:54 »
0
Agradezco su explicacion, pero no la entiendo, porque me explica varios conceptos enrrevesados....agradecería explicacion "para tontos",

De todas formas, muchas gracias.