Dans la foulée de discussions récentes à propos d'habitudes et bonnes pratiques, ceci est un exemple récurrrent où j'hésite entre l'une ou l'autre écriture.
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 std::string s; for ( ...; ...; ...) { s.clear(); get_string(s); .... } std::vector<unsigned> v; for ( ...; ...; ...) { v.clear(); get_vector(v); .... }
La 2ème écriture est la plus "naturelle", mais je me demande si la 1ère n'est pas plus performante. Des allocations/désallocations de mém ont lieu systématiquement à chaque itération dans le 2ème cas, avec un "peu de chance" elle seront moins fréquentes dans le 1er.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 for ( ...; ...; ...) { std::string s; get_string(s); .... } for ( ...; ...; ...) { std::vector<unsigned> v; get_vector(v); .... }
On peut généraliser le pb à toute classe autre que string ou vector. Vaut-il mieux instancier un type à l'interieur d'une boucle, ou en dehors juste avant d'y entrer ?
Merci![]()
Partager