猿问

C ++中的“对象”数据类型?

我发现了一些与我的问题有关的问题,但它们并没有真正回答我的问题。在Java和C#中,我们有一个“对象”数据类型(在C#中是“ var”),它可以像任何东西一样存储。例如,我要使用二维数组,其类型设置为object,因此我也可以在其中存储整数和字符串。但是我真的很想念C ++。据我所知,在C ++中有模板,但是我真的不知道它们是如何工作的。

template <class T>
T t[] = {1, "2"};

这给出了一个错误。我知道列表,但是如果可能的话,我想使用数组。


智慧大石
浏览 122回答 2
2回答

子衿沉夜

在C#中,可以由引用标识的每个对象都以相同的标头开头,该标头包括有关其类型,是否已与监视器锁关联的信息等。这使得可以使用可以接收任何种类的方法引用并在由此识别的对象上执行某些操作,而不必了解或关心引用的类型。在C ++中,可能有没有任何标头的类型-只是原始数据。其中一些类型称为PODS(普通旧数据结构),可以支持某些其他类型无法安全完成的操作。但是,没有通用概念的对象具有相同的标头样式。即使许多非PODS类型确实支持至少一个需要某种标头的通用功能(检查基类指针是否可以安全地强制转换为派生类对象的能力),也无法保证标头包含足以唯一标识对象类的信息。如果X1和X2这两个派生的X0,同样地Z1,并Z2从Z0,实现可以简单地存储0页眉X0和Z0),1X1和Z1和2X2和和Z2。由于X0*无法识别anZ1和Z0*无法识别an&nbsp;X1,因此无需使标头区分X1和Z1。因为没有标准的标头可以唯一地标识对象的类型,所以没有通用的方法让函数接收指向任意未知类型的对象的指针并对它执行任何有用的操作。
随时随地看视频慕课网APP
我要回答