reinterpret_cast
provoque la prise en compte des données que vous diffusez comme étant de type différent, sans qu'aucune conversion ne soit effectuée. Selon la norme, la seule chose qui est définie comportement après un reinterpret_cast
est à reinterpret_cast
revenir au type d'origine.
Cela semble un peu inutile, mais l'une des raisons pour lesquelles vous voudrez peut-être l'utiliser est, par exemple, d'utiliser certaines bibliothèques C (par exemple pthreads) en C++. Un grand nombre de bibliothèques C qui impliquent des rappels transmettent un paramètre de type void*
au rappel. En C++, la bonne façon de traiter cela est de prendre un pointeur vers ce que vous voulez utiliser comme paramètre, reinterpret_cast
vers void*
en le passant dans la bibliothèque C, puis reinterpret_cast
vers quoi il se trouve dans le rappel .
Bien qu'il ne soit pas guranteed à comportement défini par la norme, sur la plupart des plates-formes/compilateurs, quel reinterpret_cast
fait est simplement considérer les données à un autre type, en utilisant la même configuration binaire. Par exemple, si vous avez un double d
32 bits dont le modèle de bit est 01101010 00111100 01101010 01000001
et que vous écrivez int i = reinterpret_cast<int>(d)
, alors i
sera un entier dont le modèle de bit 01101010 00111100 01101010 01000001
, même si cela représentera une valeur numérique totalement différente de celle d'un entier. il a fait comme un double. Et évidemment, cela peut vous causer des ennuis rapidement si les types impliqués ne sont pas de la même taille.
Il lance un pointeur char à un int, pas un caractère à un int. De toute façon, c'est indéfini. –
@Axel: Vous avez absolument raison. Fixé. Merci. – ereOn
Sauf que cette réponse est toujours fausse. Si nous ne pouvions pas utiliser 'reinterpret_cast' dans ce cas, que pourrions-nous utiliser d'autre? Lancer quelque chose de non apparenté comme 'char *' à 'int' est exactement ce que' reinterpret_cast' est pour__.Bien sûr, le résultat pourrait, selon la norme, être n'importe quoi et dépend fortement de la plate-forme. Mais quand vous en avez besoin, vous 'reinterpret_cast' est ce que la norme fournit. – sbi