Parce qu'un petit exemple est bien mieux qu'un long discours, nous allons voir ce qu'il ne faut pas faire et pourquoi il ne faut pas le faire. L'exemple suivant est basique et mal conçu mais l'important est de voir qu'utiliser les chiffres directement, c'est mal. Imaginez la classe suivante :

class Name {};
class FirstName {};
 
class ContactList
{
  // ...
private:
  Name names[100];
  FirstName firstNames[100];
};

Imaginez que vous n'ayez pas écrit ces classes et que vous ayez à les modifier. Qui vous dit alors que le 100 du premier membre est la même valeur sémantique que celle du second ? Alors, qu'aller vous modifier si vous voulez augmenter le nombre de contacts ? Le premier, le second ou les deux 100 ? Avant toute modification de ce genre, il est nécessaire de se poser la question : Que signifie cette valeur ? C'est une pure perte de temps.

Lorsque vous parcourez votre tableau, vous pourriez faire un for (int i = 0; i < 100; ++i) .... Quand vous allez augmenter le nombre de contacts, il ne faudra pas oublier cette occurrence de 100 sinon votre programme pourrait se comporter bizarrement. Dans le cas où vous oublieriez de changer cette valeur alors que vous auriez diminué la taille du tableau, vous courrez droit vers un plantage à l'exécution en dépassant la zone mémoire. La cause de ce genre d'erreur peut être assez difficile à trouver lors d'une séance de débogage.

Pire encore, qui vous dit qu'un 200 trouvé dans ce code ne signifierait pas sémantiquement notre 100 * 2 ? Ou qu'un 50 soit notre 100 / 2 ?

La solution à ce problème est très simple, soit on utilise une constante, soit un type enum comme dans cet exemple :

class ContactList
{
public:
  static const unsigned int MaxContacts = 100;
  // ou enum { MaxContacts = 100 };
  // ...
private:
  Name names[MaxContacts];
  FirstName firstNames[MaxContacts];
};

On corrige alors les erreurs précédentes : le for devient for (int i = 0; i < MaxContacts; ++i)..., le 200 devient un 2 * MaxContacts, le 50 un MaxContacts / 2. Maintenant, pour changer le nombre de contacts, sans causer d'erreurs, il suffit juste de changer la valeur de MaxContacts.

Évitez ce genre d'erreur, systématiquement et votre code sera meilleur, plus facile à maintenir, et il vous évitera de longues séances de débogage. Enfin, sachez qu'un 50000 peut très bien être un int sur certaines plateformes ou un long sur d'autres. Ceci pourra vous poser des problèmes avec des méthodes surchargées... Utilisez donc des variables, leurs types sont ceux que vous leur avez donnés au moment de la déclaration, alors qu'avec un nombre, c'est le compilateurs qui décide...