Const Member



  • Hallo,

    gibt es einen Weg einen const member NICHT in der Initialisierungsliste zu setzen, sondern erst später?
    Folgender Fall (erfundener Code, dient nur als Beispiel):

    class Foo {
    const int num; // Wenn einmal gesetzt, ändert es sich nie mehr
    
    Foo(Bar* b) {
       num = 2 * b->getVal(); 
    }
    
    };
    

    Ich will also im Ctor num setzen, aber das scheint nicht zu gehen. Gibt es also irgend einen Weg, const member zu setzen?



  • initialisierungsliste:

    struct foo
    {
      const int i;
    
      foo(bar *b)
      :  i(b->getVal() * 2)
      {}
    };
    

    bb

    edit: sry, lesen 4tw 😉


  • Mod

    Wenn du die Initialisierungsliste nicht verwenden willst (warum eigentlich nicht?), könntest du stattdessen einen Zeiger auf ein const Element verwenden.



  • fallu schrieb:

    Gibt es also irgend einen Weg, const member zu setzen?

    eigtentlich wird dies ja explizit durch den Bezeichner const verboten ... was ist denn das problem in der initialisierungsliste?



  • Ich will also im Ctor num setzen, aber das scheint nicht zu gehen. Gibt es also irgend einen Weg, const member zu setzen?

    Es gibt Mittel und Wege. Die sind aber UB (undefined behaviour) und somit böse. 😉

    Sag besser, was du eigentlich machen willst, dann können wir andere Vorschläge bringen.



  • drakon schrieb:

    Sag besser, was du eigentlich machen willst, dann können wir andere Vorschläge bringen.

    Mh naja, der Grund ist einfach, dass ich mir nicht sicher bin, ob ich in einer Initialisierungsliste so "komplexe" Ausdrücke wie 2 * b->getVal() verwenden kann. Hab da mal was gelesen, dass die Reihenfolge eine Rolle spielt usw.



  • fallu schrieb:

    drakon schrieb:

    Sag besser, was du eigentlich machen willst, dann können wir andere Vorschläge bringen.

    Mh naja, der Grund ist einfach, dass ich mir nicht sicher bin, ob ich in einer Initialisierungsliste so "komplexe" Ausdrücke wie 2 * b->getVal() verwenden kann. Hab da mal was gelesen, dass die Reihenfolge eine Rolle spielt usw.

    komplexe ausdrücke ist kein problem...
    die reihenfolge sollte hier auch keine rolle spielen...
    (initialisiert wird in der deklarations-reihenfolge, nicht in der reihenfolge, wie es in der init.-liste steht)

    bb


Anmelden zum Antworten