Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ 枚举的起始值是否在0和0x0000之间存在差异?_C++_Enums - Fatal编程技术网

C++ 枚举的起始值是否在0和0x0000之间存在差异?

C++ 枚举的起始值是否在0和0x0000之间存在差异?,c++,enums,C++,Enums,这是否会改变枚举中存储或递增值的方式?如果它们是相同的,为什么人们将其定义为0x000?没有区别,这只是一个可读性问题。例如,它表示枚举值用于某种二进制上下文,例如位标志 enum Flags { FLAG_NONE = 0x0000, FLAG_READ = 0x0001, FLAG_WRITE = 0x0002, FLAG_APPEND = 0x0004, FLAG_TEXT = 0x0008, FLAG_MEMMAP = 0x0

这是否会改变枚举中存储或递增值的方式?如果它们是相同的,为什么人们将其定义为0x000?

没有区别,这只是一个可读性问题。例如,它表示枚举值用于某种二进制上下文,例如位标志

enum Flags {
    FLAG_NONE   = 0x0000,
    FLAG_READ   = 0x0001,
    FLAG_WRITE  = 0x0002,
    FLAG_APPEND = 0x0004,
    FLAG_TEXT   = 0x0008,
    FLAG_MEMMAP = 0x0010
};
否。
0x0000(根据需要添加任意多的0)在十六进制中仅为0。

有时候,枚举中的所有数字都是十六进制的。因为都是十六进制的,所以您也可以用十六进制定义第一个,因为它看起来更干净。

这些特定值没有区别,它们完全相同


但对于其他值,请记住,前置
0
使其成为八进制常数。这意味着您要避免使用诸如
000
001
002
010
044
等值(试图保持常量的长度相等)。

一个值为八进制的0,另一个值为十六进制的0。相同的数字。@H2CO3不:@Mystical嗯,这对我来说有点震惊。:)我认为他们在语法中包含这一点的原因是,如果0不是一个八进制数,那么这里的语法将是不明确的:0(十进制)和0(八进制)。我的意思是,你到底是如何用八进制和十进制表示0的?@H2CO3:没有真正的缺陷。标记“0”被认为是以八进制还是十进制编码的0实际上并不重要,在任何情况下,它都是值为0的文本。请尝试重写语法,使“0”不是八进制文字,并最终得到一个稍微复杂一点的等效语法。不要附加超过8个零,枚举会在内部转换为整数。如果下一个数字被视为0x0000000000000001@PrototypeStark不是真的。枚举将转换为适合它们的最小类型。因此,如果您编写的是
0x0000000000001
,并且您有一个64位整数类型,那么它将转换为该类型。@H2CO3取决于您的编译器<代码>gcc如果未使用
修改属性((打包))
将始终使用
int
(如果是这样,将使用最小的可能类型)。但是
0x0000000000001
的十进制值仅为1,因此枚举的大小为1字节。零的数量不影响整数文本的类型。值才是最重要的。@bames53是的,很好地发现了-当然我的意思是
0x10000000000000