Je suis un peu confus avec l'applicabilité de reinterpret_castvs static_cast. D'après ce que j'ai lu, les règles générales consistent à utiliser une conversion statique lorsque les types peuvent être interprétés au moment de la compilation, d'où le mot static. C'est le cast que le compilateur C ++ utilise également en interne pour les conversions implicites.
reinterpret_casts sont applicables dans deux scénarios:
- convertir des types entiers en types pointeurs et vice versa
- convertir un type de pointeur en un autre. L'idée générale que je me fais est que ce n'est pas transférable et doit être évité.
Là où je suis un peu confus, c'est une utilisation dont j'ai besoin, j'appelle C ++ à partir de C et le code C doit s'accrocher à l'objet C ++, donc en gros il contient un void*. Quelle conversion doit être utilisée pour convertir entre le type void *et le type Class?
J'ai vu l'utilisation des deux static_castet reinterpret_cast? Bien que d'après ce que j'ai lu, il semble staticque la diffusion puisse être meilleure au moment de la compilation? Bien qu'il indique d'utiliser reinterpret_castpour convertir d'un type de pointeur à un autre?
reinterpret_castne se produit pas au moment de l'exécution. Ce sont deux instructions de compilation. De en.cppreference.com/w/cpp/language/reinterpret_cast : "Contrairement à static_cast, mais comme const_cast, l'expression reinterpret_cast ne se compile dans aucune instruction CPU. Il s'agit purement d'une directive de compilation qui demande au compilateur de traiter la séquence de bits (représentation d'objet) d'expression comme si elle avait le type new_type. "