与完整对象和子对象混淆
Confusion with complete objects and sub-objects
本文关键字:对象 更新时间:2023-10-16
class A {
int x;
};
class B : public A {
int y;
};
B b;
我知道b
被认为是B
的完全对象,而B
所包含的对象是A
的子对象。
但是有人告诉我这个,
c++ Standard 1.8第3段
(1.8/3)对于每一个对象x,都存在一个称为完备对象的对象—如果x是一个完整的对象,则x是x的完全对象-否则,x的完全对象是包含x的(唯一的)对象的完整对象。
在这个,我发现措辞非常混乱与所有那些x
s到处都是,你能解释我的例子吗?
听起来,他们指的是由new操作符返回的对象,或者作为局部变量放在堆栈上的对象。例如,如果我们从上面的代码开始,b是x的完整对象。我们是如何得到它的?通过在层次结构中向上工作:
- (x)是它自己的完整对象吗?不,它是a的元素,因此一个更大物体的一部分。
- (A)是它自己的完整对象吗?不,它是B的超类一个更大物体的一部分。
- (B)是它自己的完整对象吗?是的,因为对象b是申报为b类
(如果b是一个更大的对象的一部分,那么我们将不得不在层次结构中进一步查找完整的对象)
引用自c++ 11标准1.8。更彻底:
2)对象可以包含其他对象,称为子对象。子对象可以是成员子对象(9.2节)、基类子对象(第10节)或数组元素。不是其他对象的子对象的对象称为完整对象。
3)对于每一个对象x,存在一个称为x的完全对象的对象,确定如下:
如果
x
是一个完整对象,则x是x
的完整对象。否则,x的完整对象是包含
x
的(唯一)对象的完整对象。
换句话说,考虑如下:
struct A { }; struct B : A { };
A x[10];
B y;
现在x[1]
是一个完整对象是x
的对象,y::A
是一个完整对象是y
的对象(两个子对象都是A
类型)。
这只是术语…
b
是b
、x
、y
的完整对象,是b
的A
子对象。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象