C++ 枚举的起始值是否在0和0x0000之间存在差异?
这是否会改变枚举中存储或递增值的方式?如果它们是相同的,为什么人们将其定义为0x000?没有区别,这只是一个可读性问题。例如,它表示枚举值用于某种二进制上下文,例如位标志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
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
。