Deklarationen in C++



  • Kurze Frage:

    Weshalb ist es in C++ (im logischeren Gegensatz zu C) möglich Daten überall zu deklarieren und nicht nur am Anfang eines neuen Stackbereichs ?

    Beispiel C vs. C++

    void c_function(void) {
      int a, b, c;
    
      // do something with a...
    
      // do something with b...
    
      // do something with c...
    }
    
    void cpp_function(void) {
      int a;
    
      // do something with a...
    
      int b;
    
      // do something with b...
    
      int c;
    
      // do something with c...
    }
    

    Danke für die Aufklärung!



  • Weil es besser ist für die Übersicht und Fehlervermeidung.



  • Gerade weil Typen benutzerdefinierte Konstruktoren besitzen können, ist es sehr praktisch. Statt

    T x;
    ...
    x = ...;
    

    sollte man in C++ versuchen

    T x = ...; // Oder T x (...);
    

    zu schreiben -- also eine Initialisierung der Zuweisung vorzuziehen.

    BTW: Seit C99 ist das auch legal in C wenn ich mich nicht irre.



  • senfer schrieb:

    Gerade weil Typen benutzerdefinierte Konstruktoren besitzen können, ist es sehr praktisch. ...

    Außerdem ist es praktisch, Objekte gleich richtig (z.B. mit dem Ergebnis mehrerer Funktionsaufrufe initialisieren) und übersichtlich initialisieren zu können.

    A a;
    a.do_something(3);
    B b(a.getB_Val());
    

    - keine "Vorratobjekte" deklarieren zu müssen

    A a(getfirstInput());
    if(a.doit()) return;
    
    B b(getNextInput());
    if(b.doit()) return;
    
    C c(getNextInput());
    c.do_something_other();
    

    - Sich keine "künstliche globalen Variablen" einzuhandeln, wie es sonst gerne mit "Hilfsvariablen" passiert.
    Sowas kann man zwar auch in "vor-C99" mit "Scopeorgien" einigermaßen hinbekommen, aber das wird schnell unübersichtlich.
    Allein schon das

    for(size_t i = 0; i ...
    

    finde ich superpraktisch....

    Gruß,

    Simon2.


Anmelden zum Antworten