Tak, jak w §5.2.7 [expr.dynamic.cast] dla dynamic_cast<T>(v)
(kopalni nacisk):
Jeśli C jest typ klasy, do której punkty T lub odnosi się wirowanie w czasie check logicznie wykonuje się w następujący sposób:
- Jeśli w najbardziej wyprowadzonym obiekcie wskazano (odniesione) do v, v punktów (odwołuje się) do publicznej klasy bazowej podobiekt obiektu C, a jeśli tylko jeden obiekt typu C pochodzi z podobiektu wskazywanego (nazywane) przez v punktów wynikowych (odniesienie) do tego obiektu C.
- przeciwnym razie, jeśli punkty v (obliczono) do klasy bazowej publicznej podobiektu przedmiotu najbardziej pochodnej, od typu obiektu najczęściej pochodzących posiada klasę zasady, typu C, który jest jednoznaczną i publicznych punkty wynikowe (odwołanie) do podobiektu C najbardziej wyprowadzonego obiektu.
- W przeciwnym razie sprawdzanie w czasie działania nie powiedzie się.
W twoim przypadku, v
odnosi się do obiektu, który jest najbardziej pochodzącego instancją swoimi C
, ale statyczny typ v
jest wskaźnik do klasy bazowej publicznej A
. Podstawową klasą C
wspomnianą w ofercie jest Twoja B
.
Czy istnieje szczególny powód, dla którego podejrzewasz, że obserwowane zachowanie może być nie tak? (Jest to uzasadnione pytanie w każdym przypadku, ale to by miało znaczenie, na czym powinna się skupić dobra odpowiedź.) – hvd
@Hvd Byłem prawie pewien, że nie było to możliwe. Nie wiem dlaczego. :) – Constructor
@hvd Mam na myśli założenie, że wynik programu powinien być "fałszywy", nie oznacza to oczywiście, że użycie 'dynamic_cast' może być nieważne w niektórych przypadkach. – Constructor