两个相同大小(和长度)的数组是否具有相同的元素偏移
Do two arrays of the same size (and length) have same element offsets?
C++标准似乎对数组有点简洁。
假设我有两种不同的数据类型:T1
和T2
。我为它们中的每一个创建数组,两个数组的长度相同N
;所以我有CCD_ 4和CCD_。
现在,sizeof(T1[N]) == sizeof(T2[N])
是否意味着两个数组的连续元素将具有相同的偏移?
或者,在更实际的形式中:如果我(处理对齐问题)将char[sizeof(T1[N])]
同时投射到T1*
和T2*
,是否保证T1[0]
和T2[1]
不会重叠,反之亦然?
是。
阵列的末端没有任何填充或对齐,因此sizeof(T1[N])
始终等于sizeof(T1) * N
。
知道了这一点,我们就知道sizeof(T1[N]) == sizeof(T2[N])
意味着sizeof(T1) == sizeof(T2)
(取消两侧的N
)。此外,数组必须是连续的,数组内部没有对齐或填充。因此,你的问题的答案是肯定的。
相关文章:
- 如何找到大小'x'数组是否完全填充,在C++?
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 是否基于数组B整数打印数组A中的整数
- 检查TCHAR数组输入是否为带符号整数C++
- 堆栈和队列是否像C++中的数组一样传递?
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 是否假定reinterpret_cast<char*>(myTypePtr)指向数组?
- 如果分配数组引发异常,是否应该释放该数组
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 我是否不正确地集中了这些字符数组?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 在 c++ 中是否允许创建具有运行时边界的数组?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 检查输入 std::array 指针数据是否等于某个常量数组
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 将对象的字节复制到数组并再次复制回来是否安全
- 是否可以将结构数组别名为结构成员数组?
- 当另一个数组是内存集时,内存集是否会更改数组长度?
- 任意大小的 constexpr 数组是否可以用作 switch 语句中的案例?