Разница между int и System::Int32

#.net #c -cli #int #int32

#.net #c -cli #int #int32

Вопрос:

Поскольку я пишу приложения, используя 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.
}
  

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

Ответ №1:

В спецификации языка 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. Эквивалентом C System::Int64 является long long .

Ответ №2:

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

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

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

Комментарии:

1. @Братья Вито Апоян: Вы читали измененный ответ? Я не думаю, что что-то не так.

2. @Братья Вито Апоян: Никакой разницы вообще.

3. Я бы счел int более переносимым и масштабируемым, чем System::Int32 . С более поздними версиями компилятора и достижениями в области аппаратного обеспечения размер int может измениться для более новых выпусков (требуется перекомпиляция) того же кода. Если вы укажете System::Int32 , это жестко закодирует размер и диапазон этой переменной.

Ответ №3:

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

Комментарии:

1. @ViTo: Я не уверен насчет C / CLI, но я знаю, что в C # int и Int32 имеют точно такой же тип: int это просто языковая конструкция, которая означает System.Int32 .

2. Да, это означает, что они одинаковы.

Ответ №4:

int в C # то же самое, что System.Int32 в .Net.

Комментарии:

1. Но вопрос НЕ в C #.

Ответ №5:

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

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

Комментарии:

1. Если int быстрее, чем System:: Int32, я всегда должен использовать int. И для чего мне нужен System:: Int32?

2. Вы меня неправильно поняли. int короче, чем System::int32 , что означает, что для ввода требуется меньше времени. 🙂 В остальном это просто разные названия одного и того же.

Ответ №6:

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