Sowohl Klirren 3.5.0 und g ++ 4.9.0compile the following code fine (mit -std=c++11 -Wall -Wextra -pedantic-errors
) und das Programm Ausgänge true
:Kann man von A * nach B * über dynamic_cast umwandeln, wenn A und B keinen gemeinsamen Vorfahren haben?
#include <iostream>
struct A
{
virtual ~A() = default;
};
struct B
{
virtual ~B() = default;
};
struct C : A, B
{
virtual ~C() = default;
};
int main()
{
C c;
A* ap = &c;
B* bp = dynamic_cast<B*>(ap);
std::cout << std::boolalpha << (bp != nullptr) << std::endl;
}
Gibt es einen bestimmten Grund, warum Sie vermuten, dass das angezeigte Verhalten falsch ist? (Es ist eine gültige Frage, aber es würde einen Unterschied machen, worauf sich eine gute Antwort konzentrieren sollte.) – hvd
@hvd Ich war mir fast sicher, dass es nicht möglich war. Ich weiß nicht warum. :) – Constructor
@hvd Ich meine, ich nahm an, dass die Ausgabe des Programms "falsch" sein sollte, nicht, dass die Verwendung von 'dynamic_cast' in einigen Fällen natürlich ungültig sein kann. – Constructor