Différence entre int et de Système::Int32
Question
Comme je suis en train d'écrire des applications à l'aide de C++ .NET framework, je veux poser une question.
Quand je suis à l'écriture de code exactement pour "boucle" j'ai toujours utiliser ce style de codage:
for( int i=0; i<somevalue; ++i ) {
// Some code goes here.
}
mais comme je suis à l'aide de C++ .NET je peux écrire
for( System::Int32 i=0; i<somevalue; ++i ) {
// Some code goes here.
}
Je pense qu'il y a pas de différence, ai-je le droit ?Si non pouvez-vous expliquer quelle est la différence entre ces deux façons et.la sorcière est plus efficace ?
La solution
La seule différence est probablement à être plus explicite sur la gamme de valeurs prises en charge par int
et System::Int32
.
System::Int32
fait le 32 bits plus explicite pour ceux qui lisent le code.On devrait utiliser int
où il y a juste besoin d'une 'integer', et l'utilisation System::Int32
où la taille est importante (code de chiffrement, structures), de sorte que les lecteurs sont claires, tout en conservant les mêmes.
À l'aide de int
ou System::Int32
le code résultant sera identique:la différence est purement explicite de lisibilité de code ou de l'apparence.
Autres conseils
L' C++/CLI langage de spécification (p.50) affirme que:
Les types fondamentaux de carte de valeur correspondante de la classe de types la mise en œuvre, comme suit:
signed char
cartes àSystem::SByte
.unsigned char
cartes àSystem::Byte
.- Si une plaine
char
est signé,char
cartes àSystem::SByte
;sinon, il cartes àSystem::Byte
.- Pour tous les autres types fondamentaux, la cartographie est la mise en œuvre définies par l' [c'est moi qui souligne].
Cette diffère à partir de C#, dans lequel int
il est expressément défini comme un alias pour System.Int32
.En C++/CLI, comme dans la norme ISO C++, un int
a "la taille naturelle suggéré par l'architecture de l'environnement d'exécution", et est seulement la garantie d'avoir au moins 16 bits.
Dans la pratique, cependant, .NET ne fonctionne pas sur les systèmes 16 bits, de sorte que vous pouvez supposer 32 bits int
s.
Mais être prudent avec long
:Visual C++ définit comme 32 bits, ce qui est pas de la même comme un C# de long.Le C++ équivalent de System::Int64
est long long
.
non.L'un d'entre eux n'est qu'un alias pour l'autre.
int
en C# est le même que System.Int32
de .Net.
Apparemment, à la différence de C et régulière, C++, C# et C++/CLI ont un int
le type qui est toujours en 32 bits.
Ceci est confirmé par MSDN, donc la réponse est qu'il n'y a pas de différence entre les deux, autre que le fait que int
il est considérablement plus rapide à taper que System::int32
.
Les deux, int
et int32
, sont en effet synonymes; int
sera un peu plus familiers de la recherche, Int32
fait le 32 bits plus explicite pour ceux qui lisent votre code.