Powiedzmy mam trzy klasy: A (matka, streszczenie), a B i C, dzieci A.niejawna konwersja vs. static_cast gdy upcasting
Tak B i C dziedziczą od A (dziedziczenie publiczne) . Mam listę wskaźników do A, które zapełniam wskaźnikami B lub C.
Pytanie brzmi: jaki jest preferowany styl podczas wykonywania rzutowania/konwersji?
class A {};
class B : public A {};
class C : public A {};
B* objB = new B();
C* objC = new C();
std::list<A*> myList;
// Option A: static cast conversion
myList.push_back(static_cast<A*> (objB));
myList.push_back(static_cast<A*> (objC));
// Option B: implicit conversion
myList.push_back(objB);
myList.push_back(objC);
// Option C: C-style conversion (I understand that this is evil and must be avoided)
myList.push_back((A*) objB);
myList.push_back((A*) objC);
Czyli pod względem klarowności (stylu kodowania) i bezpieczeństwa, który z nich jest lepszy? Rozumiem, że static_cast jest łatwiejszy do wyszukania, ale w tym przypadku niejawna konwersja powinna wystarczyć.
Oto odpowiedź, której potrzebowałem. Więc nie static_cast podczas upcasting, ale tak, gdy downcasting. Dziękuję Ci! (i bardzo szybka odpowiedź!) – fern17
@ fern17 Zwróć też uwagę, że przy downcastingu możesz nie zawsze wiedzieć, czy jest to B czy C. To właśnie dotyczy 'dynamic_cast'. – JorenHeit
Tak, wiem, dziękuję za wyjaśnienie (dla przyszłości mnie, kto powróci na to pytanie) – fern17