„#define” este o directivă de preprocesare. Acesta definește un lable și o valoare, care vor fi poziționate în codul sursă preprocesat în același loc al fiecărei apariții a etichetei. Niciun tip nu este definit, deci este o substituție de bază și mută a șirurilor înainte de compilare. Apoi poate duce la erori sau neînțelegeri în timpul compilării.
„const int xxx” definește un tip și blochează valoarea acelei instanțe. Este mai sigur să utilizați această metodă. Compilatorul poate verifica erorile de tip și poate afișa mesaje (sau întrerupe compilarea) dacă ați făcut o greșeală.
Exemplu:
#define A 5 int dummy_integer = A
… va fi preprocesat ca …
int dummy_integer = 5
… și compilatorul va citi această declarație.
Cu toate acestea, dacă îmi amintesc bine, puteți oricând să suprascrieți o directivă de preprocesare după cum urmează:
#define A 5 int dummy_integer = A //some code here #undef A #define A "my_string" std::cout << A
Asta nu este bine. Folosind modificatorul „const”, în schimb, nu puteți „schimba valoarea (și nici tipul) unei variabile (și așa este„ constantă ”definită).