用于C ++ 17的n4659草案描述了第4章中语言的一般原理。在第4.5章,C ++对象模型[intro.object]中,我无法理解一个句子的含义(强调我的)
3如果在与“n的数组”类型的另一个对象e相关联的存储中创建完整对象(8.3.4) unsigned char“或类型为”n std :: byte的数组“(21.2.1),该数组为创建的数据提供存储 对象如果:
(3.1) - e的生命周期已经开始而未结束,并且
(3.2) - 新对象的存储完全适合e,和
(3.3) - 没有更小的数组对象满足这些约束。
虽然示例显示数组可以为比数组短得多的元素提供存储:
struct A { unsigned char a[32]; };
struct B { unsigned char b[16]; };
A a;
B *b = new (a.a + 8) B; // a.a provides storage for *b
int *p = new (b->b + 4) int; // b->b provides storage for *p
这里 *p
仅使用4个字节(假设 sizeof(int)
4)是一个16字节的数组。那么,3.3的含义是什么?