如果存在,是否包含头文件?
此代码提供编译错误:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
jwo*_*der 79
不,byte在C++中没有名为" "的类型.你想,而不是什么unsigned char(或者,如果您需要的8位,uint8_t距离<cstdint>,因为C++ 11).请注意,这char不一定是准确的替代方案,因为它意味着signed char在某些编译器和unsigned char其他编译器上.
Dar*_*erg 27
没有C++中没有字节数据类型.但是,您始终可以包含标准库中的bitset标头并为byte创建typedef:
typedef bitset<8> BYTE;
Run Code Online (Sandbox Code Playgroud)
注意:鉴于WinDef.h为Windows代码定义了BYTE,如果您打算以Windows为目标,可能需要使用BYTE之外的其他东西.
编辑:回应建议答案是错误的.答案没错.问题是"C++中是否存在'字节'数据类型?".答案是并且是:"没有C++中没有字节数据类型"作为回答.
关于建议的可能替代方案,为什么建议的替代方案更好?
根据我的C++标准副本,当时:
"声明为字符(char)的对象应足够大,以存储实现基本字符集的任何成员":3.9.1.1
我读到这一点,建议如果编译器实现需要16位来存储基本字符集的成员,那么char的大小将是16位.今天的编译器倾向于使用8位作为char是一回事,但据我所知,肯定不能保证它将是8位.
另一方面,"类模板位集<N>描述了一个可以存储由固定位数N组成的序列的对象." :20.5.1.换句话说,通过将8指定为模板参数,我得到一个可以存储由8位组成的序列的对象.
因此,在所编写的程序的上下文中,替代是否更好于char,因此,据我所知,虽然我可能是错的,但是在您的编译器和当时的要求上.因此,就我而言,编写代码的个人应该确定建议的替代方案是否适合他们的要求/需求/需求.
rmp*_*rmp 24
如果您使用的是Windows,那么在WinDef.h中您可以:
typedef unsigned char BYTE;
Run Code Online (Sandbox Code Playgroud)
m8m*_*ble 21
使用C++11手动定义的字节类型有一个很好的版本:
enum class byte : std::uint8_t {};
Run Code Online (Sandbox Code Playgroud)
这至少是GSL的作用.
从C++17(几乎)开始,这个版本在标准中被定义为std::byte(感谢Neil Macintosh两者).