数组的地址是否等于它在 C++ 中的第一个元素的地址?

xsk*_*xzr 4 c++ arrays memory-address language-lawyer

这可以在 C 中得到保证,因为 WG14/N1570 中有以下句子:

6.2.5/20 ... 数组类型描述了具有特定成员对象类型的连续分配的非空对象集,称为元素类型。

但是在WG21/N4527中,即在C++中,对应的句子变成了

8.3.4/1 ...数组类型的对象包含连续分配的 N 个 T 类型子对象的非空集合。

而“描述”一词改为“包含”,这不能保证数组的地址等于它的第一个元素的地址。这种改变是有意的还是无意的?如果是故意的,数组的地址是否等于它在 C++ 中的第一个元素的地址?如果是这样,C++ 标准中的哪一段可以保证这一点?

mol*_*ilo 5

我认为它没有在任何地方明确说明,但我相信它来自5.3.3 Sizeof

n 个元素的数组的大小是元素大小的 n 倍

唯一可以存储在数组起始地址的东西是数组的第一个元素。