Forum: PC-Programmierung C++ Objekt erzeugen


von Zweifler (Gast)


Lesenswert?

Guten Morgen zusammen,

bei einer beliebigen Klasse Foo(), gibt es in C++ einen Unterschied 
zwischen den beiden Anweisungen:
1
Foo foo_1;
2
Foo foo_2 = Foo();

Viele Grüße

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Ich würde sagen nein

https://godbolt.org/z/x6a7aaz4o

Matthias

Beitrag #6688322 wurde von einem Moderator gelöscht.
von Zweifler (Gast)


Lesenswert?

Μαtthias W. schrieb:
> Ich würde sagen nein
>
> https://godbolt.org/z/x6a7aaz4o
>
> Matthias

Ach sehr gut.. die wahre Hilfe hier war es mir den Komfort eines 
Online-Compilers in Erinnerung zu rufen. :-) Vielen Dank.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Zweifler schrieb:
> Μαtthias W. schrieb:
>> Ich würde sagen nein
>>
>> https://godbolt.org/z/x6a7aaz4o
>>
>> Matthias
>
> Ach sehr gut.. die wahre Hilfe hier war es mir den Komfort eines
> Online-Compilers in Erinnerung zu rufen. :-) Vielen Dank.

Genau deshalb hab ich in der Art geantwortet ;-)

von mh (Gast)


Lesenswert?

Μαtthias W. schrieb:
> Ich würde sagen nein
>
> https://godbolt.org/z/x6a7aaz4o
>
> Matthias

Natürlich gibt es einen Unterschied.
https://godbolt.org/z/8eKno3xhe

von Zweifler (Gast)


Lesenswert?

mh schrieb:
> Natürlich gibt es einen Unterschied.
> https://godbolt.org/z/8eKno3xhe
Ah, sehr gut. Ich versuche mal es zu erklären:

Variante 1 ist eine Definition (= Deklaration + Initialisierung) während 
Variante 2 eine Deklaration mit Zuweisung ist. Da der Copy-Construktor 
gelöscht wurde, schlägt das in dem Fall fehl.

von mh (Gast)


Lesenswert?

Zweifler schrieb:
> Variante 1 ist eine Definition (= Deklaration + Initialisierung) während
> Variante 2 eine Deklaration mit Zuweisung ist. Da der Copy-Construktor
> gelöscht wurde, schlägt das in dem Fall fehl.
Nein, beides sind Definitionen und bei beiden findet eine 
Initialisierung statt. Bei 1 mit dem default(, bei 2 mit copy 
Constructor)*.

*vereinfacht

von Sven B. (scummos)


Lesenswert?

Einfach gesagt: Formal sind die beiden Zeilen unterschiedlich, 
ueblicherweise kommt es aber genau auf's gleiche raus. Ein Beispiel wann 
nicht hat mh ja schon genannt.

von Zweifler (Gast)


Lesenswert?

Danke für die Anmerkungen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Zweifler schrieb:
> Variante 1 ist eine Definition (= Deklaration + Initialisierung) während
> Variante 2 eine Deklaration mit Zuweisung ist. Da der Copy-Construktor
> gelöscht wurde, schlägt das in dem Fall fehl.

Eines der ganz wichtigen Dinge in C++ ist des, den Unterschied zwischen 
einer Initialisierung und einer (Kopier-)Zuweisung zu verstehen 
(natürlich neben der Unterscheidung einer Deklaration und Definition, 
s.a. ODR).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.