C ++中对象的定义

时间:2013-11-20 19:37:56

标签: c++ object definition

有人能指出C ++中对象的(官方)定义吗?在当前的规范中,单词“object”使用了几千次,但我似乎无法找到解释对象是什么的部分或引用。

这个基本问题的背景是a discussion I recently had with another user,他对我是否可以将指向范围枚举类型的变量的指针视为对象指针的问题感到惊讶。 根据他的说法,在C ++中,每个变量都是一个对象,因此i中的变量int i = 42;也是如此。 无论如何,我可以找到其他来源说明C ++中的一个对象是一个类的实例(这肯定是我多年前在学校教过的),这与我理解上面的假设相矛盾,即任何变量都是一个对象。或者是否有这种明显矛盾的解释?

1 个答案:

答案 0 :(得分:8)

参考文献不是对象。几乎任何其他类型的实例都是。

这里的定义见1.8节:

  

C ++程序中的构造创建,销毁,引用,访问和操作对象。 对象是存储区域。 [注意:函数不是对象,无论它是否以对象的方式占用存储。 - 结束注释]对象由定义(3.1),new-expression(5.3.4)或实现(12.2)在需要时创建。创建对象时确定对象的属性。对象可以有一个名称(第3条)。对象的存储持续时间(3.7)会影响其生命周期(3.8)。对象具有类型(3.9)。术语对象类型是指用于创建对象的类型。有些对象是多态的(10.3);该实现生成与每个这样的对象相关联的信息,使得可以在程序执行期间确定该对象的类型。对于其他对象,其中发现的值的解释取决于用于访问它们的表达式(第5条)的类型。

更有用的是3.9p8中对象类型的定义:

  

对象类型是(可能是cv-quali fi ed)类型,它不是函数类型,不是引用类型,也不是void类型。

函数具有函数类型但它们不是实例,并且从不存在void的实例。

要处理您的特定辩论,您需要从3.9.2p3开始对象指针的定义:

  

指向void的指针类型或指向对象类型的指针称为对象指针类型。

事实证明, object 的定义从未重要,只有对象类型的定义。指向范围枚举的指针当然是一个对象指针(它本身也是一个对象)。

当它意味着限制类,结构或联合类型的实例时,您会发现标准使用短语类对象