Ответ 1
Существует нерешенная проблема рабочей группы библиотеки на этом uniform_int_distribution < unsigned char > должно быть разрешено, и в нем говорится, среди прочего:
Я ничего не знаю о
<random>
, который работает с 16-разрядным целых чисел, но с 8-битными целыми числами не получается, поэтому я подозреваю, чтоIntType
иUIntType
можно просто расширить, чтобы разрешить семейство char. В качестве альтернативы это изменение может быть ограничено uniform_int_distribution, где он определенно безопасен.<random>
эксперт должен решить, какое изменение лучше всего.
Предлагаемая резолюция состоит в том, чтобы изменить ограничение, чтобы разрешить стандартные целочисленные типы:
который имеет параметр типа шаблона с именем
IntType
- undefined, если только соответствующий аргумент шаблона cv-unqualified и является a стандартный целочисленный тип (3.9.1 [basic.fundamental]
и
который имеет параметр типа шаблона с именем
UIntType
- undefinedесли соответствующий аргумент шаблона не является qv-неквалифицированным и является стандартный беззнаковый целочисленный тип (3.9.1 [basic.fundamental])
Это приведет к вам без знака/подписи char, хотя не uint8_t или int8_t, но они, скорее всего, эквивалентны. Расширенные интегральные типы были исключены, чтобы упростить формулировку и максимизировать консенсус:
Это также исключает расширенные интегральные типы и широкие типы char, которые в лучшем случае кажутся приятными для использования. Я не возражаю против поддержки любого из этих типов; Я просто выбрал это, чтобы упростить формулировку и, надеюсь, максимизировать консенсус.
Примечание. Это исключает char
, так как это реализация определена, подписан ли char
или нет.
Примечание. Этот раздел также был приведен в std-обсуждение.
Джонатан Вакели отмечает, что это предложение противоречиво и комментирует, что его заметки из последнего обсуждения включают следующее:
что было совершенно очевидно, что одиночные байтовые целые числа не поддерживаются, а не случайное упущение, и поэтому мы должны быть осторожны в том, чтобы просто изменить это, не обращаясь к дизайнерам С++ 11
Он предлагает добавить член к random_device
для предоставления одиночных байтов, что кажется разумной альтернативой.