根据C++标准,int 变量是对象吗?

Is an int variable an object, according to the C++ Standard?

本文关键字:对象 变量 int C++ 标准 根据      更新时间:2023-10-16

下面您将在C++标准中找到对象的定义。

[intro.object]/1:

C++程序中的构造创建、销毁、引用、访问和 操作对象。对象由定义 (6.1) 创建,由new-expression(8.3.4),当隐式更改联合的活动成员(12.3)或创建临时对象时(7.4,15.2)。 物体在其构建期间占据存储区域 (15.7),在其整个生命周期(6.8)以及在其 破坏(15.7)。[ 注意:函数不是对象,无论 它是否以对象的方式占用存储。 注意 ] 对象的属性是在对象 创建。对象可以具有名称(第 6 条)。对象具有存储 持续时间 (6.7),影响其生命周期 (6.8)。对象具有 类型 (6.9)。有些对象是多态的 (13.3);实施 生成与每个此类对象关联的信息,使其 可以在程序执行期间确定该对象的类型。为 其他对象,其中发现的值的解释是 由用于访问的表达式类型(第 8 条)决定 他们。

我有一种感觉,是的,int变量可以被视为C++中的对象,尽管在上一段中有这样的说法:

物体在其构建期间占据存储区域 (15.7),在其整个生命周期(6.8)以及在其 破坏(15.7)。

标准中还有其他几个语句似乎假定术语对象仅限于类对象。因此,为了准确起见,我发布了这个问题。

是的,int是一个对象

您发布的报价中的所有句子对于int变量都是有效的。

此外,以下是一些示例,说明int对您发布的报价有何意义:


对象由定义创建

从 [basic.def]:

int a;                          // defines a

暗示int是一个对象。


对象具有类型

从 [基本类型]:

有两种类型:基本类型和复合类型。

int是一种基本类型。这再次表明int是一个对象。

尽管该标准没有枚举所有对象,但它可以从各个段落中推导出来。来自 [基本类型]/1

[basic.types] 及其子句对有关类型表示的实现提出了要求。有两种类型:基本类型和复合类型。类型描述对象、引用或函数。

和[基本类型]/8

对象类型是(可能符合 cv 条件的)类型,它不是函数类型、不是引用类型,也不是 cv void。

由于int既不是引用类型也不是函数类型,因此推断int只能是对象类型,因此声明的变量是对象。

根据isocpp.org:

什么是对象?

具有关联语义的存储区域。

在声明 int i 之后;我们说"i 是 int 类型的对象"。在 OO/C++ 中,"对象"通常表示"类的实例"。因此 类定义了可能许多对象(实例)的行为。

但是 int 类型不是对象。检查 cppreference.com。

以下实体不是对象:值、引用、函数、 枚举器、类型、非静态类成员、模板、类或函数 模板专用化、命名空间、参数包等。