Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question sur std::map operateur [ ] et methode size.

2 réponses
Avatar
bastien.armand
Bonjour a tous,

Voila je me pose une question a laquelle je n'ai pas trouve de
reponse,
Soit le programme suivant :

#include <map>
#include <iostream>

int main ()
{
std::map <int, int> MaMap;
MaMap[1] = MaMap.size ();
std::cout << "La valeur de MaMap[1] est : " << MaMap[1] << std::endl;
return 0;
}

L'execution de ce programme compile avec gcc me donne 1, avec le
compilateur de visual c++, l'execution donne la valeur 0. Est ce que
le comportement de l'instruction MaMap[1] = MaMap.size (); est
determine ?

Bon dimanche.
PS : dsl, pas d'accents.

2 réponses

Avatar
Michel Michaud
Dans news:,
int main ()
{
std::map <int, int> MaMap;
MaMap[1] = MaMap.size ();
std::cout << "La valeur de MaMap[1] est : " << MaMap[1] <<
std::endl; return 0;
}

L'execution de ce programme compile avec gcc me donne 1, avec le
compilateur de visual c++, l'execution donne la valeur 0. Est ce que
le comportement de l'instruction MaMap[1] = MaMap.size (); est
determine ?


Je crois que non. L'opérateur [] ajoute une donnée, alors comme le
compilateur peut évaluer la partie de gauche ou la partie de
droite en premier, on peut avoir les deux résultats différents.
Si tu as besoin de faire ça vraiment (?), tu peux utiliser insert
directement et mettre ce que tu veux (size() ou size() + 1).

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
bastien.armand
Merci pour la reponse.

En fait j'ai fait un exemple d'une ligne de code (qui associe a un
texte un nombre, les nombres associes devant se suivre) qui m'a pose
probleme pour un portage vers Linux. Il me semblait bien que cette
instruction risquait de ne pas s'executer de la meme maniere suivant
la compilation, voir meme les options d'optimisation.

PS : Je tiens a m'excuser pour le double post, je ne suis pas tres
familier avec les groupes de discussion...