gpt4 book ai didi

非固定枚举的 C++11 值?

转载 作者:行者123 更新时间:2023-11-30 01:58:51 25 4
gpt4 key购买 nike

在 C++11 7.2.7 中它说:

For an enumeration [with a non-fixed underlying type] where e_min is the smallest enumerator and e_max is the largest, the values of the enumeration are the values in the range b_min to b_max defined as follows... [snip]

我不明白这里定义的是什么。可能值的范围 [b_min, b_max] 与枚举数的范围 [e_min, e_max 有何区别>] ?

也许一个例子可以帮助具体的枚举定义和计算e_mine_maxb_minb_max?

最佳答案

在 C++ 中,您可以使用枚举作为位掩码。

例如:

enum Flag {
Read = 1 << 0,
Write = 1 << 1,
WithSugar = 1 << 2
};

然后你可以说:Flag f = Read | Write | WithSugar;f的值被完美定义:assert(f == 7); !

它继承自 C...

在我们的例子中,规则说 Flag应该能够代表 0 中的任何值(枚举是正的,除非存在负枚举数)到 7 .

7通过取最大的枚举器 (WithSguar : 4) 并寻找 k 来确定这样 2^(k-1) <= 4 < 2^k - 1 .最大可表示值为 2^k-1 .如果您考虑 2 补码中值的按位表示,这是有道理的:4100这样你就可以填写 001不占用更多空间,给出111作为最大值,恰好是 7 .

关于非固定枚举的 C++11 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16736652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com