Ceci devrait être simple: je vois partout les gens utilisent intptr code>, y a-t-il une raison pour laquelle je devrais utiliser
uintptr code> à la place? P>
3 Réponses :
ne semble pas qu'il y aurait une bonne raison de. Du docs: p>
remarques forts> p> ... p>
Le type INTPTR est conforme à CLS, tandis que le type UInTPTR n'est pas. seulement Le type INTPTR est utilisé dans le commun Langue Runtime em> strong>. Le type uintptr est fourni principalement pour maintenir Symétrie architecturale avec le IntPTR Tapez. P> blockQuote>
Cette réponse est marquée correcte tout en étant incorrecte.
Eh bien selon Microsoft < Code> uintptr code> est fourni principalement pour la symétrie architecturale. Un autre point intéressant est que Sur la surface, il semblerait que IntPTR soit l'option préférée. Cependant, si vous savez que vous allez faire du pointeur arithmétique, Uintptr peut être un meilleur choix puisque dans les chances hors probing, il y avait un problème obscur qui concerne les valeurs négatives. P> uintptr code> n'est pas conforme CLS. P>
Il y a une grande différence. Par exemple, sur une application 32 bits, nouveau Donc, si on veut toujours un tel pointeur, un entier négatif doit être utilisé comme valeur interne pour IntPTR, comme P> uintptr (0xc01e0001) code> entraîne un pointeur au 3223191553, mais
intPtr (0xc01e0001) code > Résultats dans un système.OverflowException: "L'opération arithmétique a abouti à un débordement". C'est-à-dire que 0xc01e0001 est supérieur à MaxValue pour INT32.
unchecked((IntPtr)(int)0xC01E0001)
Ne peut pas reproduire overflowException par var p1 = nouveau intPTR (0xc01e0001); var p2 = (intPTR) 0xc01e0001; code>
@Chrisxue qui est probablement parce que vous utilisez une architecture de 64 bits, alors que j'utilisais seulement 32 bits. Donc, essentiellement, j'ai utilisé int32, vous avez utilisé INT64. Pour produire un débordement, vous avez besoin de grandes numéros. J'ai édité ma réponse.
Wow, je ne savais même pas qu'il y avait un
uintptr code>. Pouvons-nous le nommer pour la fonctionnalité la plus inutile de
.NET code>?