„#define” to dyrektywa preprocesora. Definiuje etykietę i wartość, które zostaną umieszczone w wstępnie przetworzonym-kodzie źródłowym w tym samym miejscu każdego wystąpienia etykiety. Żaden typ nie jest zdefiniowany, więc jest to podstawowe i głupie podstawienie ciągów znaków przed kompilacją. Może to prowadzić do błędów lub nieporozumień podczas kompilacji.
„const int xxx” definiuje typ i blokuje wartość tego wystąpienia. Bezpieczniej jest użyć tej metody. Kompilator może sprawdzić błędy typu i wyrzucić komunikaty (lub przerwać kompilację), jeśli popełnisz błąd.
Przykład:
#define A 5 int dummy_integer = A
… zostanie przetworzone jako …
int dummy_integer = 5
… a kompilator odczyta tę instrukcję.
Jednakże, jeśli dobrze pamiętam, zawsze możesz nadpisać dyrektywę preprocesora w następujący sposób:
#define A 5 int dummy_integer = A //some code here #undef A #define A "my_string" std::cout << A
To nie jest dobre. Zamiast tego, używając modyfikatora „const”, nie możesz zmienić wartości (ani typu) zmiennej (a więc jest ona zdefiniowana jako „stała”).