Число фиксированного размера в C ++ - PullRequest
0 голосов
/ 29 апреля 2020

Итак, я создаю библиотеку, для которой требуются числа фиксированного размера (не как в uint32_t, а нестандартные размеры). Поэтому я предположил, что мог бы сделать что-то похожее на это:

typedef unsigned int custom_size_t:524272; // it's 65535 bytes as max value

Однако, когда я попробовал это, моя IDE (CLion 2020.1) выдал мне ошибку: Expected unqualified-id. Затем я пытаюсь скомпилировать его. Это дает мне кучу ошибок; главным образом, это дает мне ошибку expected initializer before ':' token.

Я пытался переместить :524272 в unsigned int часть (после), без каких-либо ожиданий успеха. Конечно же, я был прав. Я уже искал решение, но все они относятся к размерам, таким как uint32_t и тому подобное.

Как бы я go об этом? Да, и, для справки, это мой код (с небольшим запутыванием):

typedef unsigned int custom_size_t_1:524288;
typedef unsigned int custom_size_t_2:524272;

// ... other code ...

Ответы [ 2 ]

3 голосов
/ 29 апреля 2020

Нет такого синтаксиса в C ++ для целочисленных типов произвольных размеров.

Доступны только размеры основных целочисленных типов char, short, int, long и long long , которые всегда имеют степень двух байтов в размере. Точные целые числа ширины являются псевдонимами этих типов. Реализации могут предоставлять другие целочисленные типы в качестве расширения, но только они гарантированно существуют в стандарте.

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

Эта концепция обычно называется арифметикой произвольной или множественной точности c.


Существует стандартное предложение n2472 добавить произвольные целочисленные типы ширины в язык (с синтаксисом, отличным от того, что вы предлагаете). недавно был реализован в Clang как расширение языка.

0 голосов
/ 29 апреля 2020

Если вы ищете целые числа для использования, вы ограничены тем, что доступно в <cstdint>, который был представлен в C ++ 11

А именно, int8_t, int16_t и т. Д. c. https://en.cppreference.com/w/cpp/types/integer

Если вы хотите манипулировать числами по их битам, вы можете использовать bitsets

Если вы ищете, хотите выполнить математические операции с определенной точностью или большим числом вы можете использовать внешнюю библиотеку, такую ​​как:

...