C++中对象的定义
Definition of object in C++
有人能给我指出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来限制类、结构或联合类型的实例。
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 如何使用构造函数声明指向用户定义对象的指针?
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 为什么不允许通过 decltype(lamda) 定义对象,我该如何改进它?
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 编写安全包装类以管理用户定义对象的指针
- 如何在包含自定义对象的容器中使用分区函数C++