referencen swappen



  • hallo, ich habe keine kleines problem mit meinem code,
    ich habe 2 stacks, einer soll als quelle dienen, und
    aus den objekten darin werden dann objekte generiert, die in target
    landen sollen, dabie werden die objekte in quelle "verbraucht"

    also dachte ich mir, ich baue mir 2 stacks, und tausche die dann immer
    über ihr referencen
    also das sind die stacks, und dazu die referencen :

    Stack<SearchState *> m_openSlots1;
    Stack<SearchState *> m_openSlots2;
    Stack<SearchState *>& actual_SourceStack;
    Stack<SearchState *>& actual_TargetStack;
    

    aber das tauschen geht nicht, wie man sieht ...

    std::cout << "Target size before switch " << actual_TargetStack.size() << std::endl;
    std::cout << "Source size before switch " << actual_SourceStack.size() << std::endl;
    
    Stack<SearchState *>& temp = actual_SourceStack;
    actual_SourceStack = actual_TargetStack;
    actual_TargetStack = temp;
    
    std::cout << "Target size after switch " << actual_TargetStack.size() << std::endl;
    std::cout << "Source size after switch" << actual_SourceStack.size() << std::endl;
    }
    

    denn das liefert :

    Target size after expanding 11
    Source size after expanding 0
    Target size after expanding 11
    Source size after expanding 11

    erwartet hätte ich aber (genau das was ich mit pointern bekomme)

    Target size after expanding 11
    Source size after expanding 0
    Target size after expanding 0
    Source size after expanding 11

    mit pointer gehts, weiss wer warum das mit referencen nicht geht?



  • Du kannst Referenzen in C++ einfach nicht umbiegen. Wie sollte der Compiler denn unterscheiden, ob Du gerade operator= des referenzierten Objekts aufrufen oder die Referenz neu setzen möchtest?

    Referenzen müssen (und können nur) bei Initialisierung an ein Objekt gebunden werden.


Anmelden zum Antworten