Plus précisément, dans le cas d'un int et en mode release (avec tous les paramètres de compilation classique) on peut être presque à 100% sur que ça ne change rien.
Par contre dans le cas des classes ça peut jouer beaucoup. Dans le cas d'un string par exemple:
1 2 3
| f(const std::string& ss) {
s=ss;
} |
Beaucoup d'implémentations allouent une chaine vide dans le constructeur par défaut (pour rappel une chaine vide n'est pas... vide, c'est 1 char qui contient 0). Si tu n'utilise pas l'initialisation à la volée, le constructeur par défaut de std::string est appelé, suivi de son opérateur d'affectation. Ce qui fait deux allocations de mémoire alors qu'une seule est nécessaire si tu appelles son constructeur de copie:
f(const std::string& ss):s(ss) {}
Cela est sans compter que certaines classes ne disposent tout simplement pas de constructeur par défaut.
Bref l'initialisation à la volée est une bonne habitude à prendre.
Partager