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.