Constucteur et initialisation - C++ - Programmation
Marsh Posté le 24-11-2006 à 16:22:20
non, je crois que c'est pareil dans le premier cas tu utilise une liste d'initialisation et dans le deuxième tu le fait dans le constructeur. Sachant qu'il y a des cas : initialisation de reférence où tu ne peut faire l'initialisation que par la liste d'initialisation...
Marsh Posté le 24-11-2006 à 16:33:53
utilise l'intialisation chaque fois que tu le peux, sinon les membres sont construits avec leur constructeur par défaut ce qui demande du travail inutile 
 
string s; 
MaClasse() 
{ 
  this->s = "foo"; 
} 
 
ça construit d'abord s comme chaine vide, puis ça doit refaire le boulot pour y affecter "foo" ...
Marsh Posté le 24-11-2006 à 22:33:58
+1 
même si avec un entier l'optimiseur va applanir tout ça, c'est un bon reflexe à prendre 
Marsh Posté le 24-11-2006 à 23:21:43
| jesus_christ a écrit : même si avec un entier l'optimiseur va applanir tout ça | 
 
Entier ou plus généralement type fondamental, à mon avis, ce n'est pas suffisant. Il faut que le compilateur prouve qu'il n'y a pas d'effet de bord lié à var avant l'affectation dans le bloc. 
Marsh Posté le 25-11-2006 à 11:03:58
| ++fab a écrit : Entier ou plus généralement type fondamental, à mon avis, ce n'est pas suffisant. Il faut que le compilateur prouve qu'il n'y a pas d'effet de bord lié à var avant l'affectation dans le bloc. | 
 
dans son cas prouver ça c'est pas dur... 
 
niveau assembleur, au lieu de faire un 
sub esp, 4          ; empiler une valeur arbitraire 
mov [esp+4], 1   ; mettre cette valeur à 1 
 
ça fera un 
push 1               ; empiler 1 
 
la résolution des dépendance peut donc se faire directement au niveau assembleur
Marsh Posté le 25-11-2006 à 11:33:26
| jesus_christ a écrit : dans son cas prouver ça c'est pas dur... | 
 
Dans son cas oui. Le prouver dans un cas plus général non. 
 
| Code : 
 | 
 
Si le compilateur ne peut pas prouver que bar est "pure", l'optimisation échouera. 
 
| Citation : la résolution des dépendance peut donc se faire directement au niveau assembleur | 
 
? (je ne vois pas comment le résultat d'une optimisation peut prouver quoi que ce soit)
Marsh Posté le 25-11-2006 à 11:46:00
il compile sans prouver quoi que ce soit, puis à la génération d'asm il optimise. C'est assez facile de calculer les dépendances aux niveau ASM (d'ailleurs le CPU le fait lui-même en hard).
Marsh Posté le 25-11-2006 à 12:22:30
à l'optim niveau asm, il transforme 
 
sub esp, 4          ; empiler une valeur arbitraire  
mov [esp+4], 1   ; mettre cette valeur à 1  
 
en  
 
push 1               ; empiler 1  
 
ce qui revient, au bas niveau, à transformer "var = 1" en "var(1)"
Marsh Posté le 25-11-2006 à 14:56:59
S'il n'y a aucune instruction entre l'initialisation et l'affectation, le compilateur  
a l'oportunité d'effectuer l'optimisation à un niveau de représentation plus élévé.
Marsh Posté le 25-11-2006 à 17:57:36
je suis d'accord mais au pire, il peut le faire au niveau asm
Marsh Posté le 24-11-2006 à 16:14:08
hello.
J'aimerais savoir si il y a une différence entre ses 2 morceau de code:
merci d'avance