C++中对象的定义

Definition of object in C++

本文关键字:定义 对象 C++      更新时间:2023-10-16

有人能给我指出C++中对象的(官方)定义吗?在当前的说明书中;对象";被使用了几千次,但我似乎找不到一个章节或参考资料来解释对象是什么

这个基本问题的背景是我最近与另一位用户进行的一次讨论,他对我的问题感到惊讶,即指向作用域枚举类型变量的指针是否可以被视为对象指针。根据他的说法,在C++中,每个变量都是一个对象,因此也是int i = 42;中的变量i。无论如何,我可以找到其他来源,说C++中的对象是一个类的实例(这肯定是我多年前在学校学到的),这与我理解的任何变量都是对象的假设相矛盾。或者对这种明显的矛盾有什么解释吗?

引用不是对象。几乎任何其他类型的实例都是。

以下是第1.8节中的定义:

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

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

对象类型是一种(可能是cv限定的)类型,它不是函数类型,不是引用类型,也不是void类型。

函数有函数类型,但它们不是实例,而且从来没有void的实例。

为了处理您的特定争论,您需要从3.9.2p3:中定义对象指针

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

事实证明,对象的定义从来都不重要,只有类型对象的定义才重要。指向作用域枚举的指针当然是对象指针(它本身也是一个对象)。

您会发现,Standard使用短语class object来限制类、结构或联合类型的实例。