根据C++标准,int 变量是对象吗?
Is an int variable an object, according to the C++ Standard?
下面您将在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。
以下实体不是对象:值、引用、函数、 枚举器、类型、非静态类成员、模板、类或函数 模板专用化、命名空间、参数包等。
- 你能重载对象变量名本身返回的内容吗
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何使用std::lower_bound比较对象变量,而不使用第二个对象进行比较
- 将私有对象变量与用户输入的变量进行比较
- 具有已定义操作重载的 C++ 非类型化值对象/变量库
- 如何对对象数组进行排序,而不考虑对象变量类型
- 在功能中设置对象变量
- 如何创建对象变量,以便每次分配新的指针
- C++ FileIO 以读取和写入对象变量
- 私下声明的对象变量的突变器/访问器方法
- C++ 列表中的对象变量在迭代过程中不会更新
- 稍后使用私有对象变量时如何初始化数组(初始化对象后)
- 通过向量更改对象变量的值
- C 全局对象变量内存释放
- 基本数据类型变量 VS 对象变量
- C 复制分配运算符,用于参考对象变量
- c++从列表中移除元素,并将其分配给对象变量
- 我们是否需要在C++中同步局部对象变量
- 点运算符和箭头运算符之间的区别 结构对象变量 在 C 或 C++ 中创建树
- 无法访问在 std 回调中传递的对象变量