是否保证sizeof(T [N])== N * sizeof(T)?

时间:2017-09-27 22:48:36

标签: c++ arrays language-lawyer sizeof

我一直认为T返回的N个元素数组的大小({1}}保证恰好是N sizeof的N倍。

comments on this question让我对此表示怀疑。有信誉的用户声称数组可能包含填充,这会破坏相等性。当然这些平台可能不存在,但它们是否被允许?

如果允许,这会破坏许多常见习语,例如计算sizeof(T)数组所需的存储空间,或使用N * sizeof(T)计算数组中的元素数。

2 个答案:

答案 0 :(得分:11)

是。 [expr.sizeof] 包含关于sizeof

的这一位
  

应用于数组时,结果是数组中的总字节数。这意味着 n 元素数组的大小 n 乘以元素的大小。

答案 1 :(得分:2)

sizeof的重点是它包含相关的填充。数组的每个元素在前一个元素之后都是sizeof(T)个字节。因此整个数组的大小为N * sizeof(T)