Default Initialisierung für alle Variablen



  • In den Klassen kann man die Objekte so initialisieren:

    class Foo 
    { 
      void bar(){ int m; } 
    
      int a=0, b=0; 
    };
    

    m musst du schon selber mit 0 initialisieren. Das kann doch nicht so schwer sein, einfach = 0 anzuhängen.
    Ansonsten kannst du auch einen wrapper (Ist das in diesem Kontext das richtige Wort?) schreiben, der die richtigen Variablen abkapselt, sich wie der Originaltyp verhält aber sie immer mit 0 initialisiert.



  • Und jetzt soll jeder wissen, dass default-initialized in diesem Fall nicht initialisiert meint?

    Da kann ich nur seufzen. Nein, default-initialized heißt bei Skalaren, das nichts geschieht. Sie werden schon initialisiert - aber eben nur default-initialisiert, was beduetet das eben nichts getan wird. Das ist doch einfach zu verstehen.

    Was geht nur in deinem Hirn vor.

    Was geht bloß in den Köpfen der Anderen vor, denke ich.

    Ich sag nur Pitfall und so.

    🙂



  • Sone schrieb:

    Da kann ich nur seufzen. Nein, default-initialized heißt bei Skalaren, das nichts geschieht. Sie werden schon initialisiert - aber eben nur default-initialisiert, was beduetet das eben nichts getan wird. Das ist doch einfach zu verstehen.

    Es ist absolut nicht intuitiv.

    Was allgemein als "Default-Wert" für ints bekannt ist, ist 0. Also könnte der unbedarfte C++-Programmierer annehmen, default-initialisiert bedeutet, dass jeder Wert mit 0 initialisiert wird. Das ist logisch und konsistent.

    Stattdessen bedeutet default-initialized, dass manchmal mit 0, manchmal mit rand() initialisiert wird. Das ganze ist viel zu kompliziert und ziemlich inkonsistent.

    Anstatt dem Standard wie die Bibel zu folgen könntest du auch mal einen Schritt zurücktreten und zugeben, dass das ein ziemliches Wirrwar ist. Historisch gewachsen. C-Kompatibilität und so. Auf jeden Fall nicht intuitiv.

    Sie werden schon initialisiert - aber eben nur default-initialisiert, was beduetet das eben nichts getan wird. Das ist doch einfach zu verstehen.

    Siehst du, selbst du steigst nicht durch. "Sie werden schon initialisiert" ist eindeutig falsch.

    Der Punkt ist, dass "default-initialisiert" ein eigenes Wort ist, das rein gar nichts mit "default" oder "initialisiert" zu tun hat. Nur so kann man den Standard verstehen.



  • Und wie willst du sonst die Semantik zusammenfassen, dass bei Klassen der Default-Konstruktor aufgerufen wird, wobei Skalaren nichts getan wird?



  • Sone schrieb:

    Und wie willst du sonst die Semantik zusammenfassen, dass bei Klassen der Default-Konstruktor aufgerufen wird, wobei Skalaren nichts getan wird?

    "seltsam"

    "nicht-Einsteiger-intuitiv"

    😃



  • Sone schrieb:

    Non-static data member initializers sind doch nur für members, oder?

    Natürlich, m wird default-initialized.

    Was soll der Müll? Versuchst du dich mit komischen Halbzitaten rauszureden?

    Ich hab geschrieben.

    Idee schrieb:

    Warum wird hier m mit 0 initialisiert? Non-static data member initializers sind doch nur für members, oder?

    Also wird es das nicht.



  • glühbirne schrieb:

    Idee schrieb:

    Ne, alle lokalen Variablen in Namespaces sollen dann auch initialisiert werden.

    In Namensräumen gibt es nur globale Variablen, keine lokalen.

    In Namespaces gibt es Funktionen und Klassen mit Methoden mit lokalen Variablen.

    Idee schrieb:

    Ich will dass auch jede lokale Variable in jeder Methode/Funktion initialisiert wird.

    Das muss bei der Initialisierung der entsprechenden Variable getan werden.

    Aber du willst sowas nicht kategorisch. Was du brauchst, ist sinnvolle Initialwerte, nicht ständig irgendwelche Defaults. Diese haben nämlich die Tendenz, Logikfehler zu verschleiern.

    Du hast nicht ständig irgendwelche Defaults, sondern nur, wenn die Variable jetzt nicht initialisiert wird. Nicht initialisierte Variablen verursachen Bugs, die nur manchmal auftreten und schwer zu finden sind.

    Man könnte auch irgendwelche komischen Werte als Defaultwerte nehmen, so wie es manche Debugger machen, dann findet man die Bugs auch schneller.



  • Idee schrieb:

    Du hast nicht ständig irgendwelche Defaults, sondern nur, wenn die Variable jetzt nicht initialisiert wird. Nicht initialisierte Variablen verursachen Bugs, die nur manchmal auftreten und schwer zu finden sind.

    Man könnte auch irgendwelche komischen Werte als Defaultwerte nehmen, so wie es manche Debugger machen, dann findet man die Bugs auch schneller.

    Nichts einfacher als das: Definiere erst Variablen, wenn du sie auch mit einem Wert belegen kannst.


  • Mod

    Idee schrieb:

    Du hast nicht ständig irgendwelche Defaults, sondern nur, wenn die Variable jetzt nicht initialisiert wird. Nicht initialisierte Variablen verursachen Bugs, die nur manchmal auftreten und schwer zu finden sind.

    Super 🙄 . Laufzeitkosten um vermeintliche Anfängerprogrammierfehler abzufangen, die, wenn Fortgeschrittene sie machen, dann doch keine sind, sondern eine bewusste Entscheidung des Programmierers. Um welche Sprache geht es? Basic? Java?



  • Idee schrieb:

    Sone schrieb:

    Non-static data member initializers sind doch nur für members, oder?

    Natürlich, m wird default-initialized.

    Was soll der Müll? Versuchst du dich mit komischen Halbzitaten rauszureden?

    Mit solch einem Choleriker werde ich nicht diskutieren. Ich sehe auch nicht ein, wieso deine Aussage irgendwie von dem ersten Satz abhängt...

    Ich hab geschrieben.

    Idee schrieb:

    Warum wird hier m mit 0 initialisiert? Non-static data member initializers sind doch nur für members, oder?

    Also wird es das nicht.

    Doch, m wird - als scope-lokale Variable - default-initialized. Wie du eigentlich schon wissen solltest, würdest du mal alle Posts lesen. Das sie den Wert 0 hat, liegt wohl am Debug-Modus deines Compilers (da wird der Stack vllt. ausgenullt).



  • SeppJ schrieb:

    Idee schrieb:

    Du hast nicht ständig irgendwelche Defaults, sondern nur, wenn die Variable jetzt nicht initialisiert wird. Nicht initialisierte Variablen verursachen Bugs, die nur manchmal auftreten und schwer zu finden sind.

    Super 🙄 . Laufzeitkosten um vermeintliche Anfängerprogrammierfehler abzufangen, die, wenn Fortgeschrittene sie machen, dann doch keine sind, sondern eine bewusste Entscheidung des Programmierers. Um welche Sprache geht es? Basic? Java?

    Das kann man zu compilezeit machen. 🙄 Ich hab geschrieben, dass man es mit einem keyword einschaltet.

    Aber vergesst es. Irgendjemand will was an C++ ändern. Das brauchen wir Profis nicht, wir machen nie Flüchtigkeitsfehler. 🙄

    Idiotenhaufen.


  • Mod

    Idee schrieb:

    SeppJ schrieb:

    Idee schrieb:

    Du hast nicht ständig irgendwelche Defaults, sondern nur, wenn die Variable jetzt nicht initialisiert wird. Nicht initialisierte Variablen verursachen Bugs, die nur manchmal auftreten und schwer zu finden sind.

    Super 🙄 . Laufzeitkosten um vermeintliche Anfängerprogrammierfehler abzufangen, die, wenn Fortgeschrittene sie machen, dann doch keine sind, sondern eine bewusste Entscheidung des Programmierers. Um welche Sprache geht es? Basic? Java?

    Das kann man zu compilezeit machen. 🙄

    Speicherstellen zur Compilezeit ändern?

    Ich hab geschrieben, dass man es mit einem keyword einschaltet.

    Ahh, du meinst so wie ein Debugmodus? Also das, was es schon in so ziemlich jedem Compiler gibt?

    Idiotenhaufen

    Bloß weil du unrecht hast, macht das andere nicht zu Idioten. Du hättest etwas über die Gründe erfahren können, wieso das in C++ so ist und nicht anders. Aber du weißt ja anscheinend jetzt schon alles, was es auf der Welt zu wissen gibt, besser als jeder andere Mensch.



  • 🙄 Ich hab geschrieben, dass man es mit einem keyword einschaltet.

    Supi, müllen wir die Sprache weiter mit unnötigen Features und Keywords voll.

    Aber vergesst es. Irgendjemand will was an C++ ändern. Das brauchen wir Profis nicht, wir machen nie Flüchtigkeitsfehler. 🙄

    Idiotenhaufen.

    Du bist nur ein rabulistischer Troll der kein C++ kann und jetzt die Sprache auf den Kopf stellt, damit er sie nicht lernen muss wie sie ist. Denkst du, wenn du hier mit richtiger Grammatik und halbwegs nachvollziehbaren Ideen kommst, wirst du die Sprache verändern, die sowieso schon dafür berüchtigt ist zu einem Monster auszuarten?



  • Sone schrieb:

    🙄 Ich hab geschrieben, dass man es mit einem keyword einschaltet.

    Supi, müllen wir die Sprache weiter mit unnötigen Features und Keywords voll.

    Nein, nein, wir brauchen dafür kein Keyword!
    Das Feature gibt es doch schon längst.
    Nennt sich Konstruktor.



  • Nennt sich Konstruktor.

    Geh' mir ja weg mit diesem Teufelszeug! RAII...



  • Die ganze Sprache ist darauf konzipiert, dass möglichst wenig für einen getan wird. Das macht ja gerade die Mächtigkeit von C und C++ aus. Man bezahlt nur für das, was man auch selber so gewollt hat.

    Große Macht bedeutet dann eben auch große Verantwortung. Wer diese nicht tragen kann, der muss halt wirklich Basic programmieren.



  • SeppJ schrieb:

    Idiotenhaufen

    Bloß weil du unrecht hast, macht das andere nicht zu Idioten. Du hättest etwas über die Gründe erfahren können, wieso das in C++ so ist und nicht anders. Aber du weißt ja anscheinend jetzt schon alles, was es auf der Welt zu wissen gibt, besser als jeder andere Mensch.

    Ich weiß warum das in C++ so ist. Ich weiß nicht alles, aber viel mehr als du denkst.

    Ich habe hier schon gesagt, dass C++ ein NULL-Pointer keyword haben sollte, aber dann kamen hier die C++ Fanboy-Idioten, die das für Javamüll gehalten haben. Unnötige keywords, bla bla... Jetzt gibt es NULL-Pointer keyword im neuen Standard.

    Ich habe hier schon gesagt, dass lokale Funktions Deklarationen nicht kompilieren sollen, weil sie ohne lokale Funktions Definitionen nichts bringen. Kamen wieder C++ Fanboyidioten mit total abstrusen Codebeispielen wo sie das brauchen könnten. Seitenlange Diskussionen bis am Ende volkard sagte, das er auch findet, dass lokale Funktions Deklarationen nicht kompilieren sollten und plötzlich waren die dummen Fanboys still.

    Jetzt kommen wieder solche Experten.

    Nathan schrieb:

    Sone schrieb:

    🙄 Ich hab geschrieben, dass man es mit einem keyword einschaltet.

    Supi, müllen wir die Sprache weiter mit unnötigen Features und Keywords voll.

    Nein, nein, wir brauchen dafür kein Keyword!
    Das Feature gibt es doch schon längst.
    Nennt sich Konstruktor.

    Ich bleib dabei.

    Idee schrieb:

    Idiotenhaufen.



  • Idee schrieb:

    Nathan schrieb:

    Sone schrieb:

    🙄 Ich hab geschrieben, dass man es mit einem keyword einschaltet.

    Supi, müllen wir die Sprache weiter mit unnötigen Features und Keywords voll.

    Nein, nein, wir brauchen dafür kein Keyword!
    Das Feature gibt es doch schon längst.
    Nennt sich Konstruktor.

    Ich bleib dabei.

    Idee schrieb:

    Idiotenhaufen.

    Du schreibst: Ich will ein Keyword mit dem alle Variablen initialisiert werden.
    Wir schreiben: Das braucht man nicht.
    Du beleidigst uns.
    Sone schreibt: Feature ist unnötig.
    Ich schreib: Gibts schon.
    Du beleidigst uns.
    🙄
    Ich werde versuchen was konstruktives zu schreiben.
    Du wirst uns beleidigen.
    -> Ich lass es.



  • Warum gibt es in C++ nicht ein keyword, damit in einer Klasse,Methode/Namespace,Funktion alle uninitialisierten Variablen mit Defaultwerten initialisiert werden?

    Ach und was ist der beste default-Wert. Warum 0 und nicht 1?

    Das brauchen wir Profis nicht, wir machen nie Flüchtigkeitsfehler

    Ich halte mich fuer einen Profi. Ich vergesse nicht, Variablen zu initialisieren. Bei anderen scheint der Debugmodus und die IDE solche Fehler aufzudecken. Zauberei ist dafuer nicht erforderlich. Allen ist geholfen ohne Sprachaenderung.



  • Seitenlange Diskussionen bis am Ende volkard sagte, das er auch findet, dass lokale Funktions Deklarationen nicht kompilieren sollten und plötzlich waren die dummen Fanboys still.

    Mir fällt auf Anhieb ein Grund dafür ein, ein natürlich selten gebrauchter aber trotzdem gültiger Grund.
    Edit: Nein, ich hatte einen Denkfehler, Grund fällt weg.

    Was volkard sagt, ist Leuten, die die Meinung allen Ernstes vertreten, nicht wichtiger als andere. Schon gar, wenn er keine Begründung mitliefert, was du nicht direkt implizierst.

    Ich habe hier schon gesagt, dass C++ ein NULL-Pointer keyword haben sollte, aber dann kamen hier die C++ Fanboy-Idioten, die das für Javamüll gehalten haben.

    nullptr ist auch nicht einfach nur irgendein Keyword, dass die Syntax schöner macht, wie du es (bestimmt) wolltest.


Anmelden zum Antworten