Utiliser static_cast
Casts classiques de style C , connu sous le nom de (T)x, regroupe plusieurs opérations de conversion distinctes sous une seule syntaxe. Cela peut prêter à confusion et entraîner des erreurs potentielles, car le compilateur ne fait pas de distinction entre static_cast, reinterpret_cast, const_cast et Dynamic_cast.
Avantages de static_cast
static_cast
Dangers des moulages de style C
Les moulages de style C, cependant, sont intrinsèquement dangereux :
Exemple de diffusion sûre et dangereuse
Considérez le code suivant :
class CDerivedClass : public CMyBase { }; class CMyOtherStuff { }; CMyBase *pSomething; // filled somewhere CDerivedClass *pMyObject; pMyObject = static_cast<CDerivedClass*>(pSomething); // Safe; as long as we checked CMyOtherStuff *pOther; pOther = static_cast<CMyOtherStuff*>(pSomething); // Compiler error: Can't convert pOther = (CMyOtherStuff*)pSomething; // No compiler error. // Same as reinterpret_cast<> // and it's wrong!!!
Le static_cast dans la première ligne est clairement communique la conversion prévue et effectue des contrôles de sécurité. Cependant, la conversion de style C dans la deuxième ligne est dangereuse et peut entraîner des erreurs d'exécution, car elle tente de convertir un type sans rapport sans précautions appropriées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!