2014-10-07 2 views
2

Определение концепции представления объекта приведен в 3.9/4:Определение представления объекта FO и оператора SizeOf

[basic.types]

Объект представление объекта типа Т представляет собой последовательность из N неподписанных объектов char, занимаемых объектом типа T, где N равно sizeof(T).

Но sizeof оператора определяется следующим образом:

[expr.sizeof]

Оператор SizeOf дает число байтов в объекта представления своего операнда.

В частности:

В применении к классу, то результат будет число байт в объекте этого класса, включая любые дополнения, необходимые для размещения объектов этого типа в массиве

Я хотел бы считать, что определение, например:

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?

+0

Массивы должны быть смежными. Объекты должны быть правильно выровнены. –

+0

@ T.C. Является ли представление объекта всех типов ожидаемым _narrow character types_ реализация, определенная из-за его размера? –

+0

Да, они должны быть. –

ответ

0

Вы просто вычислить размер структуры, как:

long size = sizeof(struct A); 

И если вы хотите массив struct A,

struct A arr[/* Size of array */]; 
Смежные вопросы