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

Le
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.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel Michaud
Le #734556
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/

bastien.armand
Le #734553
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...
Publicité
Poster une réponse
Anonyme