Соглашение об именовании используется в
на <cstdint>
(<stdint.h>
) заголовок определяет несколько интегральных типов, и их имена следуют этому шаблону:intN_t
, где N
- это количество битов, а не байтов.
учитывая, что байт строго не определен как 8 бит в длину, почему эти типы не определены как, например,int1_t
вместо int8_t
? Разве это не было бы более уместным, поскольку он учитывает машины, которые имеют байты необычной длины?
3 ответов
на машинах, которые не имеют точно таких размеров, типы не определены. То есть, если у вашей машины нет 8-битного байта, то int8_t
будет недоступен. Однако у вас все равно будут доступны наименьшие версии, такие как int_least16_t
.
причина, по которой подозревают, заключается в том, что если вы хотите точный размер, вы обычно хотите бит-размер, а не абстрактный размер байта. Например, все интернет-протоколы имеют дело с 8-битным байтом, поэтому вы хотели бы иметь 8-бит, будь то является собственным размером байта или нет.
ответ также довольно информативен в этом отношении.
int32_t
может быть 4-байтовым 8-битным типом на байт, или 2-байтовым 16-битным типом на байт, или 1-байтовым 32-битным типом на байт. Это не имеет значения, вы можете хранить в нем дело.
идея использования этих типов заключается в том, чтобы сделать явным количество битов, которые вы можете хранить в переменной. Как вы указали, разные архитектуры могут иметь разные размеры байтов, поэтому количество байтов не гарантирует количество битов, которое может обрабатывать переменная.