Bar bar = static_cast<Bar>(foo);
Questo cast fallirà. Foo
e Bar
sono tipi non compatibili, a meno che, almeno una delle seguenti condizioni:
Foo
è derivato da Bar
, O
Bar
ha un costruttore che accetta Foo
, O
Foo
ha una definita dall'utente conversione in Bar
.
La domanda più grande qui non è se verrà lanciato correttamente o meno. La domanda più grande e reale dovrebbe essere: cosa vuoi ottenere da questo cast? Perché vorresti fare una cosa del genere in primo luogo? Cosa dovrebbe fare? Voglio dire, come sarebbe l'oggetto Bar
inizializzato dall'oggetto Foo
?
Il modo ragionevole per convertire un tipo ad un altro è uno dei seguenti modi:
Sia definire Foo
come:
class Foo : public Bar
{
//...
};
Oppure stabilire Bar
come:
class Bar
{
public:
Bar(const Foo &foo); //define this constructor in Bar!
};
O fornire una funzione di conversione in Foo
come:
class Foo
{
public:
operator Bar(); //provide a conversion function Foo to Bar!
};
Sì, può funzionare, ma devi anche sapere come usarlo - Ecco un inizio su cosa fa ogni cast in C++: http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-and-reinterpret-cast-be-used – birryree