Что такое int8_t, если машина имеет> 8 бит на байт?
Я читал часто задаваемые вопросы по С++, и он говорит
Язык С++ гарантирует, что байт должен иметь не менее 8 бит
Итак, что это значит для типов <cstdint>
?
Боковой вопрос - если мне нужен массив байтов, я должен использовать int8_t
или char
и почему?
Ответы
Ответ 1
С++ (и C также) определяет intX_t
(т.е. целые типы точной ширины) typedefs как необязательные. Таким образом, его просто не будет, если нет адресной единицы, которая имеет ровно 8 бит.
Если вам нужен массив байтов, вы должны использовать char
, так как sizeof char
(и signed char
и unsigned char
) корректно определены, чтобы всегда быть 1 байт.
Ответ 2
Чтобы добавить к тому, что уже сказал Cat Plus Plus (что тип
необязательно), вы можете проверить, присутствует ли он, используя что-то вроде:
#ifdef INT8_MAX
// type int8_t exists.
#endif
или более вероятно:
#ifndef INT8_MAX
#error Machines with bytes that don't have 8 bits aren't supported
#endif