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


Anmelden zum Antworten