Trucs et astuces C++

Initialiser un tableau

Lorsqu’on déclare un tableau d’entiers, il arrive souvent que l’on préférerait que ses éléments soient initialisés à zéro.

Plutôt que de le faire manuellement dans une boucle :

int Tableau[30];

for (int i = 0; i < sizeof(Tableau)/sizeof(int); ++i)
   Tableau[i] = 0;

il est possible de l’initialiser directement ainsi :

int Tableau[30] = {};

Il est possible de n’initialiser que quelques premiers éléments avec des valeurs spécifiques. Les autres éléments seront automatiquement initialisés à zéro.

int Tableau[30] = { 543, 245, 738 };

endl et \n

En mode console, lorsqu’on souhaite faire un retour de chariot, quelle différence entre endl et \n ?

Tout d’abord, il faut préciser que \n est portable. Même si le retour de chariot est codé différemment selon les systèmes d’exploitation, l’implémentation des classes de flux (iostream) prend en charge ces différences.

Pour revenir à la différence, \n provoque un retour de chariot alors que endl provoque un retour de chariot et vide le flux de sortie (flush) ce qui garanti par exemple pour la sortie standard que le flux est immédiatement affiché.

Dans la plupart des cas, cette différence n’aura aucun impact sur le résultat obtenu sur la sortie standard. Elle peut avoir un léger impact sur la performance étant donné que endl fait plus de choses que \n.

Par contre, cette différence peut être importante si l’on travaille sur d’autres genres de flux. Par exemple si l’on envoie des informations sur un fichier de log et que l’on veut être sûr que ce log reflète l’état le plus récent du programme, alors l’usage de endl plutôt que \n permet de garantir que ce qui est envoyé dans le fichier de log l’est immédiatement.

Opérateur ternaire

L’opérateur ternaire est généralement utilisé sous cette forme :

string Texte = (Saisie == NombreMysterieux) ? "trouvé" : "raté";

Mais l’opérateur ternaire peut également être utilisé comme lvalue (valeur assignable) :

(A > B ? A : B) = 0;

ce qui est équivalent au code ci-dessous :

if (A > B)
   A = 0;
else
   B = 0;

Cette fonctionnalité peut néanmoins aboutir à un code illisible et dangereux !

Tags:

One Response to “Trucs et astuces C++”

  1. messourisMan says:

    Tout ça pour donner 2 astuces C’est honte.