2013-11-20 27 views
3

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

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

+1

在C和C++的说法中,实际上每个变量都被称为对象。没有任何标准提及的“变量”。 – 2013-11-20 19:39:42

回答

8

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

这里的定义,在1.8节中发现:

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

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

对象类型是一个(可能是CV-合格音响ED)键入不是一个函数类型,而不是引用类型,而不是无效类型。

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

为了应对您的特定辩论,你需要对象指针的定义,从3.9.2p3:

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

事实证明,对象从未要紧,对象类型仅定义的定义。一个指向范围枚举的指针肯定是一个对象指针(它本身也是一个对象)。

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

+0

巨大的+1为3.9.8。 – 2013-11-20 19:42:46