6 Basic concepts [basic]

6.9 Types [basic.types]

6.9.1 Fundamental types [basic.fundamental]

Объекты, объявленные как символы (char), должны быть достаточно большими, чтобы хранить любой член базового набора символов реализации. Если символ из этого набора хранится в символьном объекте, интегральное значение этого символьного объекта равно значению односимвольной буквальной формы этого символа. Это определяется реализацией,char может ли объект содержать отрицательные значения. Персонажи могут быть объявлены явно или . Обычный , и - это три разных типа, которые вместе называются . A , a и an занимают одинаковый объем памяти и имеют одинаковые значения ; то есть они имеют одно и то же объектное представление. Для узких символьных типов все биты представления объекта участвуют в представлении значения. [ Битовое поле узкого символьного типа, длина которого больше, чем количество бит в представлении объекта этого типа, имеет биты заполнения; см . ] Для беззнаковых узких символьных типов каждый возможный битовый шаблон представления значения представляет отдельное число. Эти требования не действуют для других типов. В любой конкретной реализации простой объект может принимать те же значения, что и a, или a ; какой из них определяется реализацией. Для каждого значения типа в диапазоне от 0 до 255 включительно существует такое значение типа , что результат от до равен , а результат интегрального преобразования от до равен .unsigned signedcharsigned charunsigned char narrow character typescharsigned charunsigned char alignment requirementsNote: [class.bit]end notechar signed char unsigned chari unsigned char j char integral conversion i char jj unsigned char i

Всего их пятьstandard signed integer types : « », « », « », « » и « ». В этом списке каждый тип обеспечивает по крайней мере такой же объем памяти, как и предыдущие в списке. Также может быть определено реализацией . Стандартные и расширенные целочисленные типы со знаком называются вместе . Обычные имеют естественный размер, предполагаемый архитектурой среды исполнения ; другие целочисленные типы со знаком предоставляются для особых нужд.signed charshort intintlong intlong long intextended signed integer typessigned integer typesint47

Для каждого из стандартных целочисленных типов со знаком существуют соответствующие (но разные) standard unsigned integer type: « », « », « », « » и « », каждый из которых занимает такой же объем памяти и имеет то же самое, что и соответствующий знаковый целочисленный тип ; то есть каждый знаковый целочисленный тип имеет то же представление объекта, что и соответствующий ему беззнаковый целочисленный тип. Аналогично, для каждого из расширенных целочисленных типов со знаком существует соответствующий с одинаковым объемом памяти и требованиями к выравниванию. Стандартные и расширенные целочисленные типы без знака называются вместе . Диапазон неотрицательных значений целочисленного типа со знаком является поддиапазоном соответствующего целочисленного типа без знака, представление одного и того же значения в каждом из двух типов является одинаковым, и представление значения каждого соответствующего типа со знаком / без знака должно быть таким же. Стандартные целочисленные типы со знаком и стандартные целочисленные типы без знака вместе называются , а расширенные целочисленные типы со знаком и расширенные целочисленные типы без знака вместе называются . Целочисленные типы со знаком и без знака должны удовлетворять ограничениям, приведенным в стандарте C, раздел 5.2.4.2.1.unsigned charunsigned short intunsigned intunsigned long intunsigned long long intalignment requirements 48extended unsigned integer type unsigned integer typesstandard integer typesextended integer types

Целые числа без знака должны подчиняться законам арифметики по модулю,2n гдеn - количество бит в представлении значения этого конкретного размера целого числа.49

Типwchar_­t - это отдельный тип, значения которого могут представлять различные коды для всех членов самого большого расширенного набора символов, указанного среди поддерживаемыхlocales. Тип wchar_­t должен иметь такой же размер, подписи и,alignment requirements как и один из других интегральных типов, называться своимunderlying type. Типыchar16_­t и char32_­t обозначают отдельные типы с тем же размером, подписью и выравниванием, чтоuint_­least16_­t и иuint_­least32_­t, соответственно, в<cstdint>, называемые базовыми типами.

Значения типаbool : либо,true либо false.50 [ Note: Там нетsigned,unsigned,shortилиlong bool типов или значения. ] Значения типа участвуют в .end notebool integral promotions

Типыbool,char,char16_­t,char32_­t, wchar_­t, и подписанные и неподписанные целые типы собирательно называются integral типами.51 Синонимом интегрального типа является . Представления целочисленных типов должны определять значения с использованием чистой двоичной системы счисления. [ Этот международный стандарт допускает представление двух дополнений, единиц дополнения и знаковых величин для целочисленных типов. ]integer type52Example: end example

Есть триfloating-point типа: float, double, и long double. Типdouble обеспечивает по крайней мере такую ​​же точностьfloat, а типlong double обеспечивает по крайней мере такую ​​же точность, какdouble. Набор значений типа float - это подмножество набора значений типа double; набор значений типаdouble - это подмножество набора значений типаlong double. Представление значений типов с плавающей запятой определяется реализацией. [ Note: Настоящий международный стандарт не предъявляет требований к точности операций с плавающей запятой; см. также[support.limits]. ] Целые и плавающие типы вместе называются типами. Специализации шаблона стандартной библиотеки должны определять максимальные и минимальные значения каждого арифметического типа для реализации.end notearithmetic std​::​numeric_­limits

Типcvvoid - это неполный тип, который не может быть завершен; такой тип имеет пустой набор значений. Он используется в качестве возвращаемого типа для функций, не возвращающих значение. Любое выражение можно explicitly converted набратьcvvoid. Выражение типаcvvoid должно быть использовано только в качествеexpression statement, в качестве операндаcomma expression, в качестве второго или третьего операнда?: ([expr.cond]), как операнд typeid,noexceptилиdecltype, как выражение вreturn statement для функции с типом возвращаемогоcvvoid, или как операнд явного преобразования в типcvvoid.

Значение типаstd​::​nullptr_­t - этоnull pointer constant. Такие значения участвуют в преобразовании указателя и указателя на член ([conv.ptr],[conv.mem]). sizeof(std​::​nullptr_­t) будет равноsizeof(void*).

[ Note: Даже если реализация определяет два или более базовых типа, которые имеют одинаковое представление значения, они, тем не менее, являются разными типами. ]end note

int также должен быть достаточно большим, чтобы содержать любое значение в диапазоне [INT_­MIN, INT_­MAX], как определено в заголовке<climits>.

См.[dcl.type.simple] Соответствие между типами и последовательностями их type-specifiers обозначающих.

Это означает, что беззнаковая арифметика не переполняется, потому что результат, который не может быть представлен результирующим целочисленным типом без знака, уменьшается по модулю числа, которое на единицу больше наибольшего значения, которое может быть представлено результирующим целочисленным типом без знака.

Использованиеbool значения способами, описанными в этом международном стандарте как «неопределенное», например, путем проверки значения неинициализированного автоматического объекта, может заставить его вести себя так, как если бы оно ни было,true ниfalse.

Следовательно,enumerations не являются цельными; однако перечисления можно преобразовать в целочисленные типы, как указано в[conv.prom].

Позиционное представление для целых чисел, использующее двоичные цифры 0 и 1, в котором значения, представленные последовательными битами, являются аддитивными, начинаются с 1 и умножаются на последовательную интегральную степень 2, за исключением, возможно, бита с самой высокой позицией. (Адаптировано из American National Dictionary for Information Processing Systems.)