Unterschied zwischen int und System::Int32
Frage
Da ich Anwendungen mit dem C++ .NET Framework schreibe, möchte ich eine Frage stellen.
Wenn ich Code genau für die „for-Schleife“ schreibe, verwende ich immer diesen Codierungsstil:
for( int i=0; i<somevalue; ++i ) {
// Some code goes here.
}
aber da ich C++ .NET verwende, kann ich schreiben
for( System::Int32 i=0; i<somevalue; ++i ) {
// Some code goes here.
}
Ich denke, es gibt keinen Unterschied. Habe ich recht?Wenn nein, können Sie erklären, was der Unterschied zwischen diesen beiden Möglichkeiten ist?Welches ist effektiver?
Lösung
Der einzige Unterschied besteht wahrscheinlich darin, dass der Bereich der unterstützten Werte explizit angegeben wird int
Und System::Int32
.
System::Int32
macht die 32-Bit-Version für diejenigen, die den Code lesen, deutlicher.Man sollte verwenden int
wo nur eine Ganzzahl und deren Verwendung erforderlich sind System::Int32
wobei die Größe wichtig ist (kryptografischer Code, Strukturen), damit die Leser sie nicht bemerken, aber die gleiche Größe beibehalten.
Benutzen int
oder System::Int32
Der resultierende Code wird identisch sein:Der Unterschied besteht lediglich in der expliziten Lesbarkeit oder dem Erscheinungsbild des Codes.
Andere Tipps
Der C++/CLI-Sprachspezifikation (P.50) sagt:
Die grundlegenden Typen sind auf entsprechende Wertklassentypen zugeordnet, die durch die Implementierung bereitgestellt werden, wie folgt:
signed char
Karten zuSystem::SByte
.unsigned char
Karten zuSystem::Byte
.- Wenn eine Ebene
char
ist unterschrieben,char
Karten zuSystem::SByte
;ansonsten kartiert es zuSystem::Byte
.- Für alle anderen Grundtypen gilt die Zuordnung durch die Implementierung definiert [Hervorhebung von mir].
Das unterscheidet sich von C#, in dem int
ist speziell als Alias für definiert System.Int32
.In C++/CLI, wie auch in ISO C++, ein int
hat „die natürliche Größe, die von der Architektur der Ausführungsumgebung vorgeschlagen wird“ und es wird nur garantiert, dass sie mindestens 16 Bit hat.
In der Praxis, Allerdings läuft .NET nicht auf 16-Bit-Systemen, Sie können also getrost von 32-Bit ausgehen int
S.
Aber seien Sie vorsichtig mit long
:Visual C++ definiert es als 32-Bit nicht das gleiche wie ein C# long.Das C++-Äquivalent von System::Int64
Ist long long
.
nein.Einer von ihnen ist nur ein Alias für den anderen.
int
in C# ist dasselbe wie System.Int32
von .Net.
Anscheinend haben C# und C++/CLI im Gegensatz zu C und regulärem C++ eine int
Typ, der immer 32 Bit lang ist.
Dies wird bestätigt durch MSDN, Die Antwort lautet also, dass es keinen Unterschied zwischen den beiden gibt, außer der Tatsache, dass int
Es ist wesentlich schneller zu tippen als System::int32
.
Die Zwei, int
Und int32
, sind in der Tat synonym; int
wird etwas vertrauter aussehen, Int32
macht die 32-Bit-Version für diejenigen, die Ihren Code lesen, deutlicher.