std::array
是一个聚合类型,其语义与持有C风格数组T[N]
作为仅非静态数据成员的结构体相同(引自cppreference)。这是否意味着数组的地址始终与其第一个元素的地址相同,即
data()
?#include <array>
#include <iostream>
int main()
{
std::array<int,6> x{};
std::cout << &x << "\n";
std::cout << x.data();
}
可能的输出:
0x7ffc86a62860
0x7ffc86a62860
如果是这样,那么有什么用处吗?下面的操作是否允许?
int* p = reinterpret_cast<int*>(&x);
for (int i=0;i<6;++i){ std::cout << p[i]; }
reinterpret_cast<int*>(&x)
而不是只使用x.data()
呢? - Alan Birtlesstruct
的地址都等于其第一个成员的地址,并且可以安全地将指向其中一个的指针转换为另一个。C++对于class
是否有相同的规则呢?我不太确定在标准中应该查找哪个部分。 - Nate Eldredgearray
是唯一数据成员,那就已经证明了我的假设是错误的。 - 463035818_is_not_a_number