Geschwindigkeitsunterschied



  • Gibt es einen merkbaren Geschwindigkeitsunterschied in großen Programmen, wenn ich Variablen direkt initialisiere:
    int val(1024) ?
    Und nicht durch kopieren initialisiere:
    int val = 1024 ?
    Gibt es überhaupt einen vll. minimalen Unterschied?

    MfG
    Stromberg



  • Eine Zuweisung bei der Initialisierung ruft IMMER den Kopierkonsruktor auf. Also KEIN Unterschied:

    Klasse a;
    Klasse b = a; //ist DASSELBE wie Klasse b(a);
    


  • Stromberg schrieb:

    Gibt es einen merkbaren Geschwindigkeitsunterschied in großen Programmen, wenn ich Variablen direkt initialisiere:
    int val(1024) ?
    Und nicht durch kopieren initialisiere:
    int val = 1024 ?
    Gibt es überhaupt einen vll. minimalen Unterschied?

    MfG
    Stromberg

    Die beiden Schreibweise sind äquivalent. = wird vom Compiler zu () optimiert. Da wird gar nichts kopiert.



  • Eine Zuweisung bei der Initialisierung ruft IMMER den Kopierkonsruktor auf. Also KEIN Unterschied:

    C/C++ Code:
    Klasse a;
    Klasse b = a; //ist DASSELBE wie Klasse b(a);

    Warum wird der Kopierkonstruktor bei Klasse b(10) aufgerufen? Ich hab gedacht mit "( )" ist es eine direkte initialisierung, und mit "=" wird durch kopieren initialisiert?!

    MfG
    Stromberg



  • Weil der Kopieroperator voraussetzt das das Ziel schon initialisiert wurde.
    Aus

    Klasse a = b;

    würde sonst ja werden:

    Klasse a();
    a = b;

    und wer weiß was dabei rauskommt?



  • tipp am rande,
    wegen solchen details wurde code noch nie "merklich" langsamer oder schneller.
    dahingehend kann man dass fast vernachlässigen.



  • Stromberg schrieb:

    Gibt es überhaupt einen vll. minimalen Unterschied?

    Bezüglich Performance rein gar keinen. Was die Semantik betrifft, auch nicht - bis auf die Tatsache, dass explizite Konstruktoren nicht mit = initialisieren können.

    Meinst du nicht folgendes Konstrukt, bei dem zuerst der Standardkonstruktor und anschliessend der Zuweisungsoperator aufgerufen wird?

    MyClass A;
    A = B;
    

    Fellhuhn schrieb:

    Klasse a();

    Detail am Rande: Das wird als Funktionsdeklaration interpretiert. 😉

    inpimp schrieb:

    tipp am rande,
    wegen solchen details wurde code noch nie "merklich" langsamer oder schneller.
    dahingehend kann man dass fast vernachlässigen.

    Da hast du völlig Recht. Premature Optimization wird in letzter Zeit zur Gewohnheit...


Anmelden zum Antworten