8 Expressions [expr]

8.3 Unary expressions [expr.unary]

8.3.3 Sizeof [expr.sizeof]

sizeof Оператор дает число байтов в объекте представления операнда. Операнд может быть выражением unevaluated operandили заключенным в скобки type-id. Оператор не должен быть применен к выражению , которое имеет функцию или неполный тип, в скобках название таких типов, или к glvalue , что обозначает битовое поле. , и есть . Результат применения к любому другому определяется реализацией. [ В частности, , , , и являются реализация. ] [ См. Определение и определение . ] sizeof sizeof(char) sizeof(signed char) sizeof(unsigned char) 1sizeof fundamental type Note: sizeof(bool) sizeof(char16_­t)sizeof(char32_­t) sizeof(wchar_­t) 77 end noteNote: [intro.memory] byte [basic.types] object representationend note

При применении к ссылке или ссылочному типу результатом является размер ссылочного типа. При применении к классу результатом является количество байтов в объекте этого класса, включая любые отступы, необходимые для размещения объектов этого типа в массиве. Размер a most derived class должен быть больше нуля. Результатом применения sizeof к подобъекту базового класса является размер типа базового класса. При применении к массиву результатом является общее количество байтов в массиве. Это означает, что размер массива элементов в несколько раз превышает размер элемента.78 n n

sizeof Оператор может быть применен к указателю на функцию, но не должен применяться непосредственно к функции.

В lvalue-to-rvalue, array-to-pointerи function-to-pointer стандартные преобразования не применяется к операнду sizeof. Если операнд является prvalue, temporary materialization conversion применяется.

Идентификатор в sizeof... выражении должен называть пакет параметров. sizeof... Оператор дает количество аргументов , предусмотренным для параметра пакета identifier. sizeof... Выражение является pack expansion. [Example:

template<class... Types>
struct count {
  static const std::size_t value = sizeof...(Types);
};

end example]

Результат sizeof и sizeof... является константой типа std​::​size_­t. [ определяется в стандартном заголовке ( , ). ]Note: std​::​size_­t <cstddef> [cstddef.syn] [support.types.layout]end note

sizeof(bool) не требуется 1.

Фактический размер подобъекта базового класса может быть меньше, чем результат применения sizeof к подобъекту, из-за виртуальных базовых классов и менее строгих требований к заполнению подобъектов базового класса.