Есть ли тип данных "байт" в C++?


если существует, есть ли заголовочный файл для включения?

этот код дает ошибку компиляции:

#include <iostream>

using namespace std;

int main()
{
    byte b = 2;

    cout << b << endl;

    return 0;
}
7 59
c++

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 на других.

Если вы используете windows, в WinDef.ч у вас есть:

typedef unsigned char BYTE;

используя C++11 есть хорошая версия для вручную определенного типа байтов:

enum class byte : std::uint8_t {};

это по крайней мере то, что GSL делает.

начиная с C++17 (почти) эта самая версия определяется в стандарте как std::byte (спасибо Нилу Макинтошу за оба).

Да, есть std::byte (определена в <cstddef>).

C++ 17 ввел его.

нет, но с C++11 есть [u]int8_t.

там же byte_lite, совместимых с C++98, C++11 и позже.