Entrambi clang 3.5.0 e g ++ 4.9.0compile the following code fine (con -std=c++11 -Wall -Wextra -pedantic-errors
) e le uscite del programma true
:È valido il cast da A * a B * tramite dynamic_cast quando A e B non hanno un antenato comune?
#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;
}
C'è una ragione particolare per cui sospetti che il comportamento che vedi possa essere sbagliato? (È una domanda valida in entrambi i casi, ma farebbe la differenza su cosa una buona risposta dovrebbe concentrarsi.) – hvd
@hvd Ero quasi sicuro che non fosse possibile. Non so perché. :) – Constructor
@hvd Intendo che ho pensato che l'output del programma dovrebbe essere 'false', non che l'uso di' dynamic_cast' potrebbe non essere valido in alcuni casi, ovviamente. – Constructor