Question sur std::map operateur [ ] et methode size.
2 réponses
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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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/
Dans news:4ba0ee5c.0405012355.6cf38617@posting.google.com,
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 mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
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
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...
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...
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...