const_cast manchmal unvermeidlich?



  • Kann es sein, dass const_cast manchmal "unvermeidlich" ist?

    void MobileUnit::attack(const Unit* enemyUnit)
    {
    	pTargetUnit = enemyUnit;    // Mag er nicht, da pTargetUnit kein const-Zeiger ist.
    	orders = ATTACK;
    }
    

    IMO ist das const hier aber schon gerechtfertigt. Natürlich wird das Objekt enemyUnit irgendwann mal verändert, weil es irgendwann später mal angegriffen wird, aber innerhalb dieser Funktion wird es nicht verändert.
    pTargetUnit kann ich natürlich nicht const machen, sonst kann ich das Zielobjekt nie verändern.



  • bin nicht gerade sicher, daß da ein const sinnvoll ist.
    edit: jo, const ist hier schwach. denn in 87 tagen bemerkst du, daß der attakierte obwohl er später angegriffen wird, sofort bemerken sollte, daß er angegriffen werden wird.



  • wenn const hier sinnvoll ist, dann würdest du kein const_cast brauchen. const ist ja nicht dazu da, damit man das sofort wieder umgeht IMHO



  • Gut, dann lass ich das const hier weg. 😋 Ich war halt der Ansicht, dass diese Methode das Zielobjekt nicht verändert. Aber wenn ich darüber nachdenke, sollte ich wirklich mal eine const-Unit haben (was allein schon Schwachsinn wäre), dann wäre es noch schwachsinniger, sie anzugreifen.



  • void MobileUnit::attack(const Unit* enemyUnit)
    

    soll ja garantieren das enemyUnit nicht geändert wird.
    Wenn pTargetUnit aber nicht const ist wird diese Garantie gebrochen weil man über pTargetUnit an einem anderen Platz eine Änderung durchführt.

    Hängt also nicht nur damit zusammen das es in "dieser" Methode nicht geändert wird.



  • Ja die Ursache der Meldung ist mir schon klar.
    Ich hab halt gemeint, ich will das jetzt const übergeben, weil in der Methode wird an der Einheit nichts geändert. Ist aber ein Schmarrn, weil eine const-Unit braucht man dann auch gar nicht angreifen, macht also wirklich keinen Sinn. 🙂


Anmelden zum Antworten