6
votes

Quelle est la différence entre int x = 1 et int x (1) en C ++?

Dupliqué possible:
y a-t-il une différence en C ++ entre copie Initialisation et initialisation de l'affectation?

Je suis nouveau à C ++, je vois rarement des personnes à l'aide de cette syntaxe pour déclarer et initialiser une variable: xxx 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?

Merci beaucoup à vous tous.


2 commentaires

Dupe: Stackoverflow.com/Questtions/1051379/...


Pas exactement pareil. Cette question semble spécifiquement sur l'initialisation des cosses.


3 Réponses :


0
votes

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.

Edit: Comme cela a été mentionné ailleurs, ils sont vraiment les mêmes pour les types de construction.


1 commentaires

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.



1
votes

Pour les types de pod, les deux déclarations sont identiques.


0 commentaires

13
votes

oui, pour les types intégrés int x = 1; et int x (1); sont les mêmes.

Lorsque vous construisez des objets de type de classe, alors Deux syntaxes d'initialisation différentes sont subtilement différentes. xxx

Ceci est initialisation directe et indique au compilateur de rechercher un constructeur sans ambiguïté qui prend y ou quelque chose que y peut être converti implicitement à et utilise ce constructeur pour initialiser x. xxx

Ça est Initialisation de la copie et indique au compilateur de créer un obj en convertissant y et utilise obj SOC Copy Constructor sur IVIALIZE x .

la copie intitualisation est équivalent à initialisation directe lorsque le type de y est le même Comme le type de x .

pour la copie initalisation , car le temporaire utilisé est le résultat d'une conversion implicite, des constructeurs marqués 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.


3 commentaires

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