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