Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/11/2015, 13:10
Avatar de xKuZz
xKuZz
 
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 10 meses
Puntos: 27
Respuesta: Diferencia entre #define y const en c++

#define es una directiva del precompilador, cuando va a compilar automáticamente cada vez que se encuentre el nombre que le has dado a la macro la sustituirá por el valor correspondiente.

const es una variable real del lenguaje, tiene su propia dirección de memoria asignada, está limitada a su ámbito local y puedes realizar operaciones como de una variable se tratase.

Así pues, en mi opinión es mejor utilizar const (si utilizas c++11 o 14 acostúmbrate también a utilizar constexpr), aunque si tienes un motivo justificado para usar la macro no pongo ninguna objeción, por los siguientes motivos:

1-Ámbito local
Cuando pones una variable const está variable queda limitada a la función o declaración en la que ha sido creada (en definitiva entre los últimos {}). Sin embargo cuando tu haces la macro con #define. Desde que es leído absolutamente todo valor con ese nombre es cambiado automáticamente antes de compilar.

2-Mayor facilidad para detectar errores
Cuando tu utilizas la macro automáticamente sustituyes antes de compilar, lo cual puede dificultar comprender el error que el compilador te muestre en caso de que lo haya. Además a la hora de depurar dispones de una variable para poder comprobaciones que créeme, es algo realmente útil.

En definitiva, si bien es cierto que tienen un coste de eficiencia ligeramente mayor usar const (o incluso ninguno ya que los compiladores tienen muchas posibilidades para optimizar código con const) que utilizar #define, const te va a dar una mayor versatilidad y, bajo mi opinión, un código más versátil y su potencial de causar errores a la hora de programar es mucho menor.