我试图找出C ++和C#数据类型之间的差异。我知道C#和java不同,因为数据类型作为对象存储在C#中,而不是让核心类库提供一个包装类来将数据类型表示为Java对象。但是我对C#和C ++数据类型的差异找不到多少......
答案 0 :(得分:4)
您描述的差异是错误的。 Java,C#和C ++都将原语视为基本对象。 C和C ++是低级语言,它们保持这种方式 - 它们作为基元对编译器来说是独一无二的。
在Java中,存在薄包装器,例如java.lang.Integer
,它是一个包含单个int
成员变量的类。
C#可以隐式地将原语视为对象,并且会根据各种情况的需要将int
转换为System.Int32
。该过程称为Boxing and Unboxing,其中第一个是隐式的,第二个是显式的。有关进一步参考,请参阅链接的文章。
答案 1 :(得分:1)
简单地说,C#的原始类型如int
bool
,short
等......被组织为结构,而C ++原始类型则不是结构。
例如,在int
基元类型本身的C#中,您可以调用一些方法(例如,您可以调用方法Parse
或Equals
)。对于bool
基元类型也是如此。
为了更进一步,Int32
和int
在C#中完全相同,以及bool
和Boolean
都是。因此,int
,bool
,short
等...是C#中的关键字,它们实际上掩盖了以下结构Int32
,Boolean
,{{1 }}。你可以通过调用:
Int16
在第一行中,我们创建了变量int a=int.MaxValue;
Int32 b = a;
,其类型为a
。变量int
的值设置为a
,int.MaxValue
实际上是int
类型中定义的常量,或者更准确地是Int32
。
在变量b的第二行值上变为变量a的值。这个
确认a
和b
是相同类型的变量,否则会发生错误。
另一方面,在C ++中,基本类型不是作为结构组织的,因此您无法调用基本类型或基元类型实例上的任何方法。这些也称为编译器原语。