Если существует файл заголовка для включения?
Этот код дает ошибку компиляции:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Если существует файл заголовка для включения?
Этот код дает ошибку компиляции:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Нет никакого типа данных байтов в С++. Однако вы всегда можете включить заголовок битового набора из стандартной библиотеки и создать typedef для байта:
typedef bitset<8> BYTE;
Примечание. Учитывая, что WinDef.h определяет BYTE для кода Windows, вы можете использовать что-то иное, кроме BYTE, если вы намереваетесь настроить таргетинг на Windows.
Изменить: в ответ на предположение, что ответ неверен. Ответ не тот. Вопрос: "Есть ли тип данных" байтов "в С++?". Ответ был и есть: "Нет байт-типа данных на С++", как было сказано.
Что касается предлагаемой возможной альтернативы, для которой было задано вопрос, почему предложенная альтернатива лучше?
Согласно моей копии стандарта С++, в то время:
"Объекты, объявленные как символы (char), должны быть достаточно большими, чтобы хранить любой элемент базового набора символов реализаций": 3.9.1.1
Я прочитал это, чтобы предположить, что если для реализации компилятора требуется 16 бит для хранения элемента базового набора символов, тогда размер char будет 16 бит. То, что сегодня компиляторы имеют тенденцию использовать 8 бит для char, это одно, но насколько я могу судить, конечно, нет гарантии, что это будет 8 бит.
С другой стороны, "бит-бит шаблона класса <N> описывает объект, который может хранить последовательность, состоящую из фиксированного количества бит, N.": 20.5.1. В других словах, указав 8 в качестве параметра шаблона, я получаю объект, который может хранить последовательность, состоящую из 8 бит.
Является ли альтернатива лучше char, в контексте написанной программы, поэтому зависит, насколько я понимаю, хотя я могу ошибаться, на ваш компилятор и ваши требования в то время. Поэтому, прежде всего, я должен написать код, насколько мне известно, чтобы определить, подходит ли предлагаемая альтернатива их требованиям/потребностям/потребностям.
Нет, в С++ нет типа "byte
". Вместо этого вам нужно unsigned char
(или, если вам нужно ровно 8 бит, uint8_t
от <cstdint>
, с С++ 11). Обратите внимание, что char
не обязательно является точной альтернативой, так как это означает signed char
для некоторых компиляторов и unsigned char
для других.
Если вы используете окна, в WinDef.h у вас есть:
typedef unsigned char BYTE;
С помощью C++11
есть хорошая версия для определенного вручную типа байта:
enum class byte : std::uint8_t {};
Это по крайней мере то, что делает GSL.
Начиная с C++17
(почти) эта самая версия определена в стандарте как std::byte
(спасибо Neil Macintosh для обоих).
Пока нет - но С++ 17 будет иметь std::byte
(определяется в <cstddef>
).
Нет, но с С++ 11 есть [u] int8_t.
Там также byte_lite, совместимый с С++ 98, С++ 11 и более поздними версиями.
Пожалуйста, используйте unsigned char
всегда для обратной совместимости.