Je suis 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 sont d'utiliser le cast statique quand les types peuvent être interprétés à la compilation d'où le mot static
. C'est le cast que le compilateur C++ utilise en interne pour les conversions implicites également.Quand utiliser reinterpret_cast?
reinterpret_cast
s sont applicables dans deux scénarios, convertir des types entiers en types de pointeurs et vice versa ou convertir un type de pointeur en un autre. L'idée générale que je reçois est que ceci est nonportable et devrait être évitée. Où je suis un peu confus est une utilisation dont j'ai besoin, j'appelle C++ à partir de C et le code C doit rester sur l'objet C++ donc, fondamentalement, il détient void*
. Quel casting devrait être utilisé pour convertir entre le void *
et le type de classe? J'ai vu l'utilisation des deux static_cast
et reinterpret_cast
? Bien que d'après ce que j'ai lu il semble que static
est mieux que la distribution peut se produire au moment de la compilation? Bien qu'il indique d'utiliser reinterpret_cast
pour convertir d'un type de pointeur à l'autre?
'reinterpret_cast' ne se produit pas au moment de l'exécution. Ce sont deux déclarations à la compilation. De http://en.cppreference.com/w/cpp/language/reinterpret_cast: "A la différence de static_cast, mais comme const_cast, l'expression reinterpret_cast ne compile pas avec les instructions de la CPU, c'est simplement une directive de compilation qui indique au compilateur traiter la séquence de bits (représentation d'objet) d'expression comme si elle avait le type new_type. " –
@HeretoLearn, est-il possible d'ajouter les morceaux de code pertinents du fichier * .c et * .cpp? Je pense que cela peut améliorer l'exposition de la question. – OrenIshShalom