Я пытаюсь выяснить различия между типами данных C ++ и C #. Я знаю, что C # и java различаются, потому что типы данных хранятся как объекты в C # вместо того, чтобы иметь библиотеку базовых классов, предоставляющую класс-оболочку для представления типов данных как объект Java. Однако я не могу найти много различий между типами данных C # и C ++ …
Разница, которую вы описываете, неверна. Java, C # и C ++ рассматривают примитивы как базовые объекты. C и C ++, будучи языками низкого уровня, сохраняют их такими — они уникальны для компилятора как примитивы.
В Java существуют тонкие оболочки, такие как java.lang.Integer
который является классом, содержащим один int
переменная-член.
C # может неявно обрабатывать примитив как объект и на лету преобразует, например, int
к System.Int32
как того требуют различные ситуации. Процесс называется Бокс и Распаковка, из которых первое неявно, а второе явно. Для дальнейшей ссылки см. Связанную статью.
Проще говоря, примитивные типы C #, такие как int
bool
, short
и т. д. организованы как структуры, в отличие от примитивных типов C ++, которые не являются структурами.
Например, в C # на int
сам примитивный тип вы можете вызывать некоторые методы (например, вы можете вызывать методы Parse
или же Equals
). Это также верно для bool
примитивный тип.
Чтобы пойти еще дальше, Int32
а также int
абсолютно одинаковые типы в C #, а также bool
а также Boolean
являются. Итак int
, bool
, short
etc … ключевые слова в C #, которые на самом деле маскируют следующие структуры Int32
, Boolean
, Int16
, Вы можете попробовать это по телефону:
int a=int.MaxValue;
Int32 b = a;
В первой строке мы создаем переменную a
какой тип int
, Значение переменной a
установлен на int.MaxValue
которая на самом деле является постоянной, определенной в типе int
или быть точнее Int32
,
Во второй строке значение переменной b становится значением переменной a. это
подтверждает, что a
а также b
переменные одного типа, в противном случае возникнет ошибка.
С другой стороны, в C ++ примитивные типы не организованы как структуры, поэтому вы не можете вызвать какой-либо метод для примитивного типа или экземпляра примитивного типа. Они также называются примитивами компилятора.