Dupliqué possible: strong>
y a-t-il une différence en C ++ entre copie Initialisation et initialisation de l'affectation? P>Je suis nouveau à C ++, je vois rarement des personnes à l'aide de cette syntaxe pour déclarer et initialiser une variable: p>
xxx pré> p> J'ai essayé, le compilateur ne s'est pas plaint et la sortie est Les mêmes que INT X = 1, sont-ils en fait la même chose? P> Merci beaucoup à vous tous. P> blockQquote>
3 Réponses :
Je ne suis pas expert C ++, mais si cela donne le même résultat, cela compte-import? Je suppose que si vous étiez vraiment intéressé, vous pourriez compiler (mais non assembler) votre code et jeter un coup d'œil à la différence. P>
Edit: Comme cela a été mentionné ailleurs, ils sont vraiment les mêmes pour les types de construction. P>
Bien sûr qu'il compte. Vous pouvez voir les mêmes résultats, mais cela pourrait simplement signifier que vous ne savez pas quels effets secondaires rechercher ou ne connaissez pas tous les cas de bord qui vous donneraient différents résultats. Il s'agit d'une question très raisonnable d'un programmeur débutant / intermédiaire.
Pour les types de pod, les deux déclarations sont identiques. p>
oui, pour les types intégrés Lorsque vous construisez des objets de type de classe, alors Deux syntaxes d'initialisation différentes sont subtilement différentes. P> Ceci est initialisation directe em> et indique au compilateur de rechercher un constructeur sans ambiguïté qui prend Ça est Initialisation de la copie em> et indique au compilateur de créer un la copie intitualisation em> est équivalent à initialisation directe em> lorsque le type de pour la copie initalisation em>, car le temporaire utilisé est le résultat d'une conversion implicite, des constructeurs marqués int x = 1; code> et
int x (1); code> sont les mêmes.
y code> ou quelque chose que
y code> peut être converti implicitement à et utilise ce constructeur pour initialiser x. p>
obj code> en convertissant
y code> et utilise
obj code> SOC Copy Constructor sur IVIALIZE
x code>. p>
y code> est le même Comme le type de
x code>. p>
explicite < / code> sont pas considéré. Le constructeur de copie du type construit doit être accessible, mais la copie elle-même peut être éliminée par le compilateur comme optimisation. P> p>
Et il convient de souligner que Obj x; x = y; produit une autre variation. Dans ce cas, X sera construit par défaut. Ensuite, à la déclaration suivante, l'opérateur d'affectation sera appelé.
Une autre chose à noter est que, permettant à des types de données uniques tels que INT d'être initialisé de cette manière (avec une syntaxe analogue à l'appel d'un constructeur de classe) permet aux modèles de travailler de manière transparente avec des types de POD et de classe.
@BOOJUM: L'ajout de cette fonctionnalité à la langue C ++ était destinée à fournir une seule façon d'initialiser des objets de toutes sortes de listes d'initialisation. Ceci est pour moi plus important (et commun) que l'initialisation des modèles à l'intérieur, qui pourraient être résolus avec la syntaxe "objet = autre_Object".
Dupe: Stackoverflow.com/Questtions/1051379/...
Pas exactement pareil. Cette question semble spécifiquement sur l'initialisation des cosses.