#.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-разрядность более понятной для тех, кто читает ваш код.