C ++和C#原始数据类型之间有什么区别?

时间:2014-09-08 21:42:39

标签: c# c++ types primitive-types

我试图找出C ++和C#数据类型之间的差异。我知道C#和java不同,因为数据类型作为对象存储在C#中,而不是让核心类库提供一个包装类来将数据类型表示为Java对象。但是我对C#和C ++数据类型的差异找不到多少......

2 个答案:

答案 0 :(得分:4)

您描述的差异是错误的。 Java,C#和C ++都将原语视为基本对象。 C和C ++是低级语言,它们保持这种方式 - 它们作为基元对编译器来说是独一无二的。

在Java中,存在薄包装器,例如java.lang.Integer,它是一个包含单个int成员变量的类。

C#可以隐式地将原语视为对象,并且会根据各种情况的需要将int转换为System.Int32。该过程称为Boxing and Unboxing,其中第一个是隐式的,第二个是显式的。有关进一步参考,请参阅链接的文章。

答案 1 :(得分:1)

简单地说,C#的原始类型如int boolshort等......被组织为结构,而C ++原始类型则不是结构。

例如,在int基元类型本身的C#中,您可以调用一些方法(例如,您可以调用方法ParseEquals)。对于bool基元类型也是如此。

为了更进一步,Int32int在C#中完全相同,以及boolBoolean都是。因此,intboolshort等...是C#中的关键字,它们实际上掩盖了以下结构Int32Boolean,{{1 }}。你可以通过调用:

来试试
Int16

在第一行中,我们创建了变量int a=int.MaxValue; Int32 b = a; ,其类型为a。变量int的值设置为aint.MaxValue实际上是int类型中定义的常量,或者更准确地是Int32

在变量b的第二行值上变为变量a的值。这个 确认ab是相同类型的变量,否则会发生错误。

另一方面,在C ++中,基本类型不是作为结构组织的,因此您无法调用基本类型或基元类型实例上的任何方法。这些也称为编译器原语。