Je suis un peu confus sur 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 la conversion que le compilateur C++ utilise internalement pour les conversions implicites également.
Les reinterpret_cast
s sont applicables dans deux scénarios :
- convertir les types entiers en types pointeur et vice versa
- convertir un type pointeur en un autre. L'idée générale que j'ai est que c'est non portable et que cela devrait être évité.
où je suis un peu confus, c'est dans un cas d'utilisation dont j'ai besoin. J'appelle du C++ depuis du C et le code C doit conserver l'objet C++, donc il a essentiellement un void*
. Quelle conversion devrait être utilisée entre le void *
et le type Classe ?
J'ai vu l'utilisation à la fois de static_cast
et de reinterpret_cast
. Bien que d'après ce que j'ai lu, il semble que static
soit préférable car la conversion peut se faire au moment de la compilation ? Bien que cela dise d'utiliser reinterpret_cast
pour convertir d'un type pointeur à un autre ?
28 votes
reinterpret_cast
ne se produit pas à l'exécution. Ce sont toutes les deux des déclarations au moment de la compilation. De en.cppreference.com/w/cpp/language/reinterpret_cast : "Contrairement à static_cast, mais comme const_cast, l'expression reinterpret_cast ne se compile pas en instructions CPU. C'est uniquement une directive du compilateur qui indique au compilateur de traiter la séquence de bits (représentation d'objet) de l'expression comme si elle avait le type new_type."0 votes
@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.