8
votes

Jeu de vide * à taper * Utilisation de style C ++ Cast: static_cast ou réinterpret_cast_cast

Donc, si votre conversion de Void * en type * ou de type * à vide * Si vous utilisez:

_beginthread(func,0,static_cast<void*>(params)


0 commentaires

3 Réponses :


8
votes

Vous devez utiliser static_cast de sorte que le pointeur soit correctement manipulé pour pointer sur le bon emplacement. Toutefois, vous ne devez faire cela que si vous avez utilisé STATIC CAST pour lancer le pointeur de Void * en premier lieu. Sinon, vous devriez réinterpret_cast sur exactement le même type de pointeur d'origine (pas de bases ou telle).


0 commentaires

0
votes

Vous devez toujours éviter REINIERPRET_CAST , et dans ce cas static_cast fera le travail. Il n'y a pas besoin d'une création de sorte lors de la conversion d'un pointeur Void * .


6 commentaires

Alors pourquoi avoir réinterpret_cast <>? Y a-t-il des situations où réinterpre_cast <> devrait être utilisé. Toutes les opérations de casting peuvent-elles être couvertes par les 3 autres opérateurs de distribution?


Si l'autre côté du vide * s'appliquera à une classe de base, vous devez également lancer à cette classe de base avant d'être affecté à NOID.


@Noah une référence pour cela?


Vous voulez dire en plus de la norme? Les moulages statiques autorisés et leurs résultats sont décrits dans 5.2.9 (expr.static.cast). Les paragraphes sur le vide * sont 4 et 10.


@ Martinyork Reterpret_cast est ce que vous utilisez pour aller entre des types non liés de la même taille (par exemple, intPTR_T <-> Void *, cela ne volera pas avec static_cast ou similaire).


@Logan Capaldo: Merci. J'essayais juste d'exprimer mon désaccord avec la déclaration de Neil.



4
votes

Utilisez static_cast des deux côtés pour cela, puis enregistrez REINERPRET_CAST pour quand aucune autre opération de casting ne le fera. Les sujets suivants fournissent plus de contexte et de détails:

quel libellé dans le C ++ Standard permet de stagner_cast (malloc (n)); travailler?

Quand utiliser Reterpret_cast?


0 commentaires