Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有';字节';C+中的数据类型+;?_C++ - Fatal编程技术网

C++ 有没有';字节';C+中的数据类型+;?

C++ 有没有';字节';C+中的数据类型+;?,c++,C++,如果存在,是否包含头文件 此代码给出编译错误: #include <iostream> using namespace std; int main() { byte b = 2; cout << b << endl; return 0; } #包括 使用名称空间std; int main() { 字节b=2; cout如果您使用的是windows,则在WinDef.h中您有: typedef unsigned char BYT

如果存在,是否包含头文件

此代码给出编译错误:

#include <iostream>

using namespace std;

int main()
{
    byte b = 2;

    cout << b << endl;

    return 0;
}
#包括
使用名称空间std;
int main()
{
字节b=2;

cout如果您使用的是windows,则在WinDef.h中您有:

typedef unsigned char BYTE;

<>不,C++中没有一个名为“<代码>字节>代码>的类型。您想要的是<代码>未签名的char < />代码(或者,如果您需要精确的8位,<代码> UTI8GYT 从<代码> <代码>)注意,<代码> char < /C>不一定是一个精确的替代,因为它在某些编译器上意味着“代码>符号char < /代码>,而在其他代码中<代码>未标记char <代码>。C++中没有字节数据类型。但是,您可以总是从标准库中包含位集头,并为字节创建一个TyBeIFF:

typedef bitset<8> BYTE;
typedef位集字节;
注意:鉴于WinDef.h为windows代码定义了字节,如果您打算以windows为目标,您可能希望使用字节以外的内容

编辑:回应回答错误的建议。 答案是没有错的。问题是:“C++中有字节”数据类型吗?答案是,并且是:“没有,C++中没有字节数据类型”。 关于建议的可能替代方案,有人问为什么建议的替代方案更好

根据我的C++标准的副本,当时:

“声明为字符(char)的对象应足够大,以存储基本字符集的任何成员”:3.9.1.1

我读这篇文章是为了说明,如果编译器实现需要16位来存储基本字符集的一个成员,那么字符的大小将是16位。今天的编译器倾向于使用8位来存储字符是一回事,但据我所知,肯定不能保证它是8位

另一方面,“类模板位集描述了一个可以存储由固定数量的位组成的序列的对象,N.”:20.5.1。换句话说,通过指定8作为模板参数,我得到了一个可以存储由8位组成的序列的对象


因此,就我所知,尽管我可能是错的,但在编写程序的上下文中,替代方法是否优于char取决于您的编译器和您当时的要求。因此,就我而言,由编写代码的个人来确定建议的替代方法是否可行适合他们的要求/需求/需要。

使用
C++11
有一个很好的手动定义字节类型版本:

enum class byte : std::uint8_t {};
这至少是政府所做的


C++17开始(几乎)这个版本在标准中被定义为(感谢Neil Macintosh两者)。

没有,但是因为C++11有。

是的,有(在
中定义)

介绍了它。

还有,与C++98、C++11及更高版本兼容

namespace std
{
  // define std::byte
  enum class byte : unsigned char {};

};
<如果你的C++版本没有STD::字节将在命名空间STD中定义字节类型。通常你不想把东西添加到STD,但是在这种情况下 这是一个缺少的标准东西



std::STL中的字节执行更多的操作。

它被称为
char
@Ben
char
必须是一个字节。只是一个字节不一定是8位。@Ben:你显然不熟悉现有的更奇特的平台。一个字节肯定没有定义为8位,不管8位字节是什么S是主要的,这就是为什么我们有<代码> CARYBIT 。我已经在一个以上的嵌入式系统上工作,其中字节不是长度为8位的。一个字符被定义为1的大小,所以,是的,字符总是字节。@本:C和C++标准明确地定义了一个“字节”。字符的大小,至少为8位。术语“字节”在其他上下文中可以定义不同,但是在讨论C或C++时,最好遵守标准的定义。OP,我会重新考虑你的答案。真的。如果一个字符被保证有1号,为什么要用字节= unSchar char < />代码写代码>,并用它来完成(就像RMP的答案所暗示的)。不太正确。<代码> char < /C++ >代码>符号char < />代码>和<代码>未签名char <代码>有三种不同类型。<代码> char < /C> >与其他两个相同。如果<代码>未签名char <代码>大于8位,则<代码> UTI8Syt < /代码>将不被定义。在Objto-C上下文中,一个C或C++可以发现我的注释有用。请在C++中更新这个代码,以反映<代码> STD::Buth的存在。答案。字节是位字符位,而不是8位。你可能想更新这个答案,因为现在有一个
std::byte
@Persixty oops为什么我说
BIT\u CHAR
。这是一个谜。宇宙的谜。。在你看来,为什么这个枚举比
typedef unsigned CHAR byte;
typedef std::uint8\t byte;
?@einpoklum,它增加了类型安全性。例如,当您意外地将这样一个字节值相乘时,您会出现编译错误。尽管它不会。当您想要正确地为某些字节别名时,您需要
char*
无符号char*
std::byte*
。除非
std::byte
不能对其执行算术,这是它可能是交易破坏者。
std::byte
不能对其执行算术运算,这可能是交易破坏者。@Pharap,这取决于-对于某些用例,不能意外执行算术可能被视为优势。因为
std::byte
只是一个加法,所以可以为作业选择正确的工具(即
std::byte
char
无符号char
uint