【发布时间】:2014-10-07 04:31:18
【问题描述】:
对象表示概念的定义在3.9/4中给出:
[基本类型]
类型 T 的对象的对象表示是 N 的序列 类型 T 的对象占用的 unsigned char 对象,其中 N 等于
sizeof(T).
但是sizeof操作符的定义如下:
[expr.sizeof]
sizeof 运算符产生 object 中的字节数 表示它的操作数。
特别是:
当应用于一个类时,结果是一个类中的字节数 该类的对象,包括放置所需的任何填充 数组中该类型的对象
我想通过例子来考虑这个定义:
struct A {
int a; //sizeof(a) is implementation defined
long b; //sizeof(b) is implementation defined
char c; //sizeof(c) is 1 by definition
// Padding, problbly equals to 3 butes
}
sizeof(A) 是如何通过实现计算的?我们只计算sizeof(a) + sizeof(b) + sizeof(c) + padding 的总和。
但是required for placingobjects of that type in an array的条件是什么?
【问题讨论】:
-
数组必须是连续的。对象需要正确对齐。
-
@T.C.所有类型的对象表示是否都期望 窄字符类型 由于 sizeof 而定义的实现是?
-
@T.C.关于我在问题中定义的结构。这意味着实现添加的填充也是未定义的,对吧?那是添加到将结构对象存储到数组中的能力的填充可能足够大。我试着确定,但是 clang 和 gcc 都给出了相同的 sizeof。