Соглашение об именовании используется в

на <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-битным типом на байт. Это не имеет значения, вы можете хранить в нем дело.


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