Frage zu Konstruktor
-
Ich war gerade am rumprobieren hab mich ausversehen verschrieben und gesehen das folgendes compiliert:
Wieso funktioniert: foo (300);
Muss man da nicht eigentlich immer einen Objektnamen mit angeben also z.b.:
foo f(300);Was macht foo(300); ?
#include <iostream> using namespace std; class foo { private: int var; public: foo ( int nr ) { var = nr; } }; int main() { foo (300); return 0; }
-
c_t_r schrieb:
Was macht foo(300); ?
Ein Temporäres Objekt anlegen. Denk dir mal du hast eine Funktion bar die ein foo als einzigen Parameter erwartet:
bar(foo(300));
-
Was bedeuet "Temporäres Objekt"?
Meinst du so?
#include <iostream> using namespace std; class foo { private: int var; public: foo() { } foo ( int nr ) { var = nr; } void bar (foo f ) { cout<<f.var<<"\n"; } }; int main() { foo f; f.bar ( foo(300) ); return 0; }
-
c_t_r schrieb:
Was bedeuet "Temporäres Objekt"?
Na ja.. temporär eben. Zeitlich beschränkt. Flüchtig. Unbenannt. Nur in seinem Ausdruck lebend..
-
c_t_r schrieb:
Was bedeuet "Temporäres Objekt"?
Ich würde ein Temporäres Objekt als eines beschreiben das keinen Namen hat und dessen Lebenszeit sich nur auf ein Statement begrenzt.
P.S.: Immer wieder informativ ist der Standard:
N3337 §12.2 / 1 schrieb:
Temporaries of class type are created in various contexts: binding a reference to a prvalue (8.5.3), returning
a prvalue (6.6.3), a conversion that creates a prvalue (4.1, 5.2.9, 5.2.11, 5.4), throwing an exception (15.1),
entering a handler (15.3), and in some initializations (8.5).