Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1062 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Constucteur et initialisation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Constucteur et initialisation

n°1481408
vincent0
Posté le 24-11-2006 à 16:14:08  profilanswer
 

hello.
 
J'aimerais savoir si il y a une différence entre ses 2 morceau de code:

Code :
  1. class B
  2. {
  3. public:
  4.  B(void) : var(1){}
  5. private:
  6.  int var;
  7. };


 

Code :
  1. class B
  2. {
  3. public:
  4.  B(void){var=1;}
  5. private:
  6.  int var;
  7. };


 
merci d'avance

mood
Publicité
Posté le 24-11-2006 à 16:14:08  profilanswer
 

n°1481419
Amonchakai
Posté le 24-11-2006 à 16:22:20  profilanswer
 

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...


Message édité par Amonchakai le 24-11-2006 à 16:22:57
n°1481438
Taz
bisounours-codeur
Posté le 24-11-2006 à 16:33:53  profilanswer
 

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" ...

n°1481558
jesus_chri​st
votre nouveau dieu
Posté le 24-11-2006 à 22:33:58  profilanswer
 

+1
même si avec un entier l'optimiseur va applanir tout ça, c'est un bon reflexe à prendre ;)

n°1481563
++fab
victime du syndrome IH
Posté le 24-11-2006 à 23:21:43  profilanswer
 

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.

n°1481606
jesus_chri​st
votre nouveau dieu
Posté le 25-11-2006 à 11:03:58  profilanswer
 

++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

n°1481614
++fab
victime du syndrome IH
Posté le 25-11-2006 à 11:33:26  profilanswer
 

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 :
  1. #include "bar.hpp" // declaration de bar
  2. struct S
  3. {
  4.     S( int i )
  5.     {
  6.         bar( i_ );
  7.         i_ = i;
  8.     }
  9.     int i_;
  10. };


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)


Message édité par ++fab le 25-11-2006 à 11:33:43
n°1481618
jesus_chri​st
votre nouveau dieu
Posté le 25-11-2006 à 11:46:00  profilanswer
 

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).

n°1481619
++fab
victime du syndrome IH
Posté le 25-11-2006 à 11:48:41  profilanswer
 

?

n°1481632
jesus_chri​st
votre nouveau dieu
Posté le 25-11-2006 à 12:22:30  profilanswer
 

à 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)"

mood
Publicité
Posté le 25-11-2006 à 12:22:30  profilanswer
 

n°1481687
++fab
victime du syndrome IH
Posté le 25-11-2006 à 14:56:59  profilanswer
 

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é.


Message édité par ++fab le 25-11-2006 à 14:57:29
n°1481735
jesus_chri​st
votre nouveau dieu
Posté le 25-11-2006 à 17:57:36  profilanswer
 

je suis d'accord mais au pire, il peut le faire au niveau asm


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Constucteur et initialisation

 

Sujets relatifs
Conception de composant; initialisation des propriétésordre d'initialisation des membres et warnings visual studio
[Csharp] - Initialisation d'une combobox (debutant)[resolu] Initialisation d'un tableau
bluetooth aide a initialisationInitialisation de deux UserForm!
[RESOLU] initialisation de mapsInitialisation d'une variable publique
Initialisation sur MAXQJSP/Servlet Initialisation d'un formulaire
Plus de sujets relatifs à : Constucteur et initialisation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR