Для чего нужны данные типы?

113
26 мая 2019, 19:40

int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t

Я понимаю что они определяют статический размер переменных на всех устройствах но для чего это нужно. + почему нет аналогий для других типов?

Answer 1

но для чего это нужно

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

Другой пример: поле в двоичном файле занимает 4 байта и нам нужно его считать в переменную. Тип int может быть 2-х, 4-х, и 8-и байтовым, поэтому при чтении в переменную int в первом случае испортится память, а в последнем - старшие 4 байта переменной будут содержать мусор. Решение - использовать int32_t.

почему нет аналогий для других типов?

Есть. Для символов есть char8_t, char16_t, и char32_t. Для вещественных - float и double. Остается только bool, но для него особой проблемы нет.

READ ALSO
Почему методы класса меняются местами при использовании различных компиляторов?

Почему методы класса меняются местами при использовании различных компиляторов?

Имеется DLL C++ скомпилированная на MSVCПри динимической подгрузке DLL инициализируется фабрика и создает класс который используется дальше

112
Перевод целых и вещественный чисел в массив символов(char) без использования стандартных функций

Перевод целых и вещественный чисел в массив символов(char) без использования стандартных функций

Необходимо написать функции перевода вещественных и целых чисел в строку без функцийПервую функцию написал

125
boost::asio::socket_base::reuse_address

boost::asio::socket_base::reuse_address

Доброго времени суток!

119
Адрес элемента из указателя на вектор

Адрес элемента из указателя на вектор

У меня есть указатель на вектор std::vector*Как получить адрес элемента i этого вектора?

112