Diferença entre int e System::Int32
Pergunta
Enquanto escrevo aplicativos usando o framework C++ .NET, quero fazer uma pergunta.
Quando estou escrevendo código exatamente para "for loop", sempre uso este estilo de codificação:
for( int i=0; i<somevalue; ++i ) {
// Some code goes here.
}
mas como estou usando C++ .NET posso escrever
for( System::Int32 i=0; i<somevalue; ++i ) {
// Some code goes here.
}
Acho que não há diferença, estou certo?Se não, você pode explicar qual é a diferença entre essas duas maneiras e.qual é mais eficaz?
Solução
A única diferença provavelmente é ser explícito sobre a faixa de valores suportada por int
e System::Int32
.
System::Int32
torna o 32 bits mais explícito para quem lê o código.Deve-se usar int
onde há apenas necessidade de 'um número inteiro', e use System::Int32
onde o tamanho é importante (código criptográfico, estruturas) para que os leitores fiquem claros, mantendo o mesmo.
Usando int
ou System::Int32
o código resultante será idêntico:a diferença é puramente de legibilidade explícita ou aparência do código.
Outras dicas
O Especificação da linguagem C++/CLI (pág.50) diz que:
Os tipos fundamentais são mapeados para os tipos de classe de valor correspondentes fornecidos pela implementação, como segue:
signed char
mapas paraSystem::SByte
.unsigned char
mapas paraSystem::Byte
.- Se uma planície
char
está assinado,char
mapas paraSystem::SByte
;Caso contrário, ele mapeia paraSystem::Byte
.- Para todos os outros tipos fundamentais, o mapeamento é definido pela implementação [ênfase minha].
Esse difere de C#, em que int
é especificamente definido como um apelido para System.Int32
.Em C++/CLI, como em ISO C++, um int
tem “o tamanho natural sugerido pela arquitetura do ambiente de execução”, e só tem garantia de ter pelo menos 16 bits.
Na prática, no entanto, o .NET não funciona em sistemas de 16 bits, portanto, você pode assumir com segurança o sistema de 32 bits int
S.
Mas tenha cuidado com long
:Visual C++ o define como 32 bits, que é não o mesmo que um C# longo.O equivalente em C++ de System::Int64
é long long
.
Não.Um deles é apenas um apelido para o outro.
int
em C# é o mesmo que System.Int32
de .Net.
Aparentemente, ao contrário de C e C++ regular, C# e C++/CLI têm um int
tipo que tem sempre 32 bits de comprimento.
Isto é confirmado por MSDN, então a resposta é que não há diferença entre os dois, a não ser o fato de que int
é consideravelmente mais rápido digitar do que System::int32
.
Os dois, int
e int32
, são de fato sinônimos; int
terá uma aparência um pouco mais familiar, Int32
torna o 32 bits mais explícito para quem lê seu código.