Je suis un peu confus avec l'applicabilité de reinterpret_cast
vs 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_cast
s 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_cast
et reinterpret_cast
? Bien que d'après ce que j'ai lu, il semble static
que la diffusion puisse être meilleure au moment de la compilation? Bien qu'il indique d'utiliser reinterpret_cast
pour convertir d'un type de pointeur à un autre?
reinterpret_cast
ne 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. "