Unterobjekt zuweisen



  • struct Base { ... };
    struct Derived : Base { ... };
    
    int main()
    {
        Base b;
        Derived d;
    
        static_cast<Base&>(d) = b;    
    }
    

    Unter welchen Umständen ist das Verhalten hier definiert? (POD, Polymorphie usw)



  • Wenn ein passender Base::operator= existiert und wohldefiniertes Verhalten hat (also nicht kaputt ist). Allerdings wird nur dem Basisobjekt von d der Wert von b zugewiesen, so dass die Sinnhaftigkeit dieses Vorgehens bezweifelt werden darf.

    Konkret:

    struct base {
      int x;
      int y;
    };
    
    struct derived : base {
      derived(int x, int y, int z) : base({x, y}), z(z) { }
    
      int z;
    };
    
    int main() {
      base b{ 1, 2 };
      derived d{ 3, 4, 5 };
    
      static_cast<base&>(d) = b;
    
      // d ist { 1, 2, 5 }
    }
    

    Das ist verwandt mit dem Slicing-Problem.


Anmelden zum Antworten