Разница между int и System :: Int32 - PullRequest
3 голосов
/ 23 мая 2011

Поскольку я пишу приложения с использованием C ++ .NET Framework, я хочу задать вопрос.

Когда я пишу код именно для цикла for, я всегда использую этот стиль кодирования:

for( int i=0; i<somevalue; ++i ) {
    // Some code goes here.
}

но поскольку я использую C ++ .NET, я могу написать

for( System::Int32 i=0; i<somevalue; ++i ) {
    // Some code goes here.
}

Я думаю, что нет никакой разницы, я прав? Если нет, вы можете объяснить, в чем разница между этими двумя способами и. кто эффективнее?

Ответы [ 6 ]

4 голосов
/ 23 мая 2011

В спецификации языка C ++ / CLI (стр. 50) сказано, что:

Карта основных типов соответствующие типы классов значений обеспечивается реализацией, а следующим образом:

  • signed char отображается на System::SByte.
  • unsigned char отображается на System::Byte.
  • Если подписана простая char, char отображается на System::SByte; в противном случае это отображается на System::Byte.
  • Для всех других фундаментальных типов отображение определяется реализацией [выделение шахты].

Этот отличается от C #, в котором int специально определен как псевдоним для System.Int32. В C ++ / CLI, как и в ISO C ++, int имеет «естественный размер, предложенный архитектурой среды выполнения», и гарантированно имеет только 16 битов.

На практике , однако, .NET не работает на 16-битных системах, поэтому можно смело предполагать 32-битные int с.

Но будьте осторожны с long: Visual C ++ определяет его как 32-битный, который не такой же, как C # long. С ++ эквивалент System::Int64 равен long long.

2 голосов
/ 23 мая 2011

Единственная разница, вероятно, заключается в явном значении диапазона значений, поддерживаемых int и System::Int32.

System::Int32 делает 32-битность более явной для тех, кто читает код. Нужно использовать int там, где нужно просто «целое число», и использовать System::Int32 там, где важен размер (криптографический код, структуры), чтобы читатели были свободны от него, сохраняя его.

При использовании int или System::Int32 полученный код будет идентичен: разница только в явной читаемости или появлении кода.

1 голос
/ 23 мая 2011

Очевидно, в отличие от C и обычного C ++, C # и C ++ / CLI имеют тип int, который всегда имеет длину 32 бита.

Это подтверждается MSDN , поэтому ответ таков, что между ними нет разницы, за исключением того факта, что int это значительно быстрее, чем System::int32.

1 голос
/ 23 мая 2011

int в C # совпадает с System.Int32 .Net.

1 голос
/ 23 мая 2011

Нет. Один из них - просто псевдоним другого.

0 голосов
/ 01 сентября 2012

Два, int и int32, действительно являются синонимами; int будет немного более знакомым, Int32 делает 32-битность более понятной для тех, кто читает ваш код.

...