Parameter in Initialisierungsliste zuweisen?



  • Hallo

    Also folgendes: Habe eine Klasse nennen wir Sie mal ClassA

    class ClassA
    {
       ClassA(double param1, int param2);
    
       double m_val1;
       int m_val2;
    };
    

    Diese Klasse besitzt nun einen Konstruktor dem 2 Werte übergeben werden.
    Werden diese Werte nun in der Initialisierungsliste den beiden Membervariablen zugewiesen.

    ClassA::ClassA(double param1, int param2)
       : m_val1(param1)
       , m_val2(param2)
    {
    }
    

    oder wird in der Initialisierungsliste nur die Werte z.B. auf 0 vorinitialisiert und in Rumpf die Werte zugewiesen.

    ClassA::ClassA(double param1, int param2)
       : m_val1(0.0)
       , m_val2(0)
    {
       m_val1 = param1;
       m_val2 = param2;
    }
    

    Was ist richtig. bzw richtiger 😉



  • Beides hat den gleichen Effekt.
    Die erste Variante ist aber eindeutig eleganter, pflegeleichter und je nach Compiler auch effizienter.

    ClassA::ClassA(double param1, int param2)
       : m_val1(param1)
       , m_val2(param2)
    {
    }
    


  • ClassA::ClassA(double param1, int param2)
       : m_val1(param1*5)
       , m_val2(param2+3)
    {
    }
    

    Auch das hier?



  • y-vonne schrieb:

    ClassA::ClassA(double param1, int param2)
       : m_val1(param1*5)
       , m_val2(param2+3)
    {
    }
    

    Auch das hier?

    vs

    ClassA::ClassA(double param1, int param2)
      : m_val1(0.0)
      , m_val2(0)
    {
      m_val1 = param1 * 5;
      m_val2 = param2 + 3;
    }
    

    Ja! Die erste Variante initialisiert m_val1/2 ja tatsächlich mit den richtigen Werten, der Konstruktor-Rumpf wird dan ggf gar nicht mehr ausgeführt.


Anmelden zum Antworten