¿Cuál es la diferencia entre #define y const?

Posibles duplicados:
¿Por qué alguien usaría #define para definir constantes?
diferencia entre una macro y una const en c ++
C ++ – enum vs. const vs. #define

¿Cuál es la diferencia entre usar #define y const para crear una constante? ¿Alguien tiene una ventaja de rendimiento sobre el otro? Naturalmente prefiero usar el const pero voy a considerar el #define si tiene las ventajas adecuadas.

La directiva #define es una directiva de preprocesador ; el preprocesador reemplaza esas macros por su cuerpo antes de que el comstackdor lo vea. Piense en ello como una búsqueda y reemplazo automáticos de su código fuente.

Una statement de variable const declara una variable real en el idioma, que puede usar … bueno, como una variable real: tomar su dirección, pasarla, usar cast, convertirla, etc.

Oh, rendimiento: quizás piense que evitar la statement de una variable ahorra tiempo y espacio, pero con cualquier nivel de optimización del comstackdor razonable no habrá diferencia, ya que los valores constantes ya están sustituidos y plegados en tiempo de comstackción. Pero obtienes la gran ventaja de verificar los tipos y hacer que tu código sea conocido por el depurador, por lo que realmente no hay ninguna razón para no usar las variables de const.

#define crea una entidad para la sustitución por el macropreprocesador, que es bastante diferente de una constante porque, dependiendo de lo que definas, se tratará o no como una constante. El contenido de un #define puede ser arbitrariamente complejo, el ejemplo clásico es el siguiente:

 #define SQR(x) (x)*(x) 

Luego más tarde si se usa:

 SQR(2+3*4) 

Eso se convertiría en:

 (2+3*4)*(2+3*4) 

La diferencia es que #define es procesado por el preprocesador haciendo lo que equivale a una simple sustitución de texto. Los valores de Const definidos de esta manera no son visibles para el comstackdor real, mientras que una variable definida con el modificador de const es una “variable” realmente tipada (bueno, realmente no es esa variable). La desventaja de #define es que reemplaza cada ocurrencia del nombre, mientras que las variables const obtienen una búsqueda normal, por lo que tiene menos riesgo de nombrar conflictos y no es seguro.

La ventaja de #define es que garantiza la consistencia y, por lo tanto, no habrá una variable de respaldo. Las variables de Const pueden o no ser sustituidas en el código, por lo que #define puede ser más rápido en algunas situaciones. Sin embargo, un buen comstackdor debe alinear esas constelaciones de todos modos y es poco probable que haga una gran diferencia en la mayoría de las situaciones, así que seguiría usando const a menos que tenga un fragmento de código donde haya visto que el comstackdor no ha insertado la variable y es un código muy, muy crítico para el rendimiento.

#define es un reemplazo de texto, por lo que es tan rápido como puede obtenerse. Además, garantiza constness. La desventaja es que no es seguro para tipos.

Por otro lado, las variables const pueden o no reemplazarse en línea en el código. Puede descartar la constness, forzándola a estar en la memoria (aunque probablemente se encuentre en la memoria de solo lectura para empezar, pero hay dolores de cabeza en ambos sentidos). Sin embargo, se garantiza que es seguro, ya que lleva consigo su propio tipo.

Personalmente recomendaría const para aclarar tu intención.

#define AB le dice al preprocesador (una parte del comstackdor) que sustituya B lugar donde ve A en el código, y lo hace antes de comstackr el código. Podría (aunque es una idea terrible) hacer algo como #define FALSE TRUE .

Una variable const significa que una vez que se establece la variable no se puede cambiar, sin embargo, no hace nada con el preprocesador y está sujeta a las reglas normales de las variables.

DEFINE es la instrucción Preprocessor, por ejemplo #define x 5. El comstackdor toma este valor e inserta donde sea que esté llamando x en el progtwig y genere el archivo objeto. Definir constantes no crea una entrada de símbolo en la tabla de símbolos. SI quiere depurar el progtwig, no encontrará x. Use constante siempre que sea posible que lo que pienso.