Es kann keinen Kompilierzeitfehler geben, weil ein Von der Basis abgeleitete Beziehung kann zur Laufzeit abhängig von der Adresse der Zeiger, die gecastet werden, existieren. static_cast
ist immer erfolgreich, führt aber dazu, dass undefiniertes Verhalten wenn Sie nicht auf den richtigen Typ zaubern. dynamic_cast
kann scheitern oder nicht und sagt Ihnen, ob Sie versucht haben, auf den richtigen Typ zu werfen oder nicht.
Also meiner Meinung nach, static_cast
sollte verwendet werden, um nach unten gerichtet nur, wenn das Geschmacksmuster nachweisen kann, dass eine solche Möglichkeit besteht. Ein gutes Beispiel hierfür ist CRTP . In manchen Situationen ist es logisch, aber man sollte es vermeiden, da es ein undefiniertes Verhalten ist.
RTTI ist nicht erforderlich für static_cast
was es möglich macht Theoretisch schneller , aber ich werde jederzeit eine dynamic_cast
gegen das undefinierte Verhalten, das static_cast
verursachen kann!