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

时间:2017-12-29 18:35:28

标签: c++ language-lawyer

下面你将在C ++ Standard中找到对象的定义。

[intro.object]/1

  

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

我有一种感觉,是的,int变量可以被认为是C ++中的一个对象,尽管上面的段落中有这样的陈述:

  

物体在其建造期间占据存储区域   (15.7),在其整个生命周期(6.8)和其期间   毁灭(15.7)。

标准中还有其他一些陈述似乎假设术语 object 仅限于类对象。因此,为了精确起见,我发布了这个问题。

3 个答案:

答案 0 :(得分:4)

是的,int对象

您发布的报价中的所有句子对int变量都有效且真实。

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

  

对象由定义

创建

来自[basic.def]

int a;                          // defines a

建议int是一个对象。

  

对象具有类型

来自[basic.types]

  

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

intfundamental type。这再次表明int是一个对象。

答案 1 :(得分:0)

即使标准没有列举对象的所有内容,也可以从各个段落中推断出来。来自[basic.types]/1

  

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

[basic.types]/8

  

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

由于int不是reference type,也不是function type,因此推断int只能是对象类型,因此声明的变量是对象。< / p>

答案 2 :(得分:0)

根据isocpp.org

什么是物体?

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

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

但是类型int不是对象。选中cppreference.com

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