在C ++ 14中,我想限制枚举类持有的位数:
enum class InstalledCapacity : uint8_t{
None,
One_1000uF,
Two_1000uF,
Three_1000uF,
One_1F,
One_3_3F,
Reserved2,
Invalid
};
using HarvestingCapability = uint8_t;
typedef struct {
InstalledCapacity installed_capacity : 3;
HarvestingCapability harversting_capability_x_15mW : 5;
}EnergyInfo;
这似乎不起作用,并且我收到以下警告:
eeprom_metadata.h:51:42: warning: '<anonymous struct>::installed_capacity' is too small to hold all values of 'enum class InstalledCapacity'
InstalledCapacity installed_capacity : 3;
^
由于我的InstalledCapacity
枚举类中只有7个值,因此我希望只能使用3个位。
我在做什么错,这甚至可能吗?提前非常感谢!
答案 0 :(得分:2)
没错,编译器只是在说3位太小而无法容纳枚举的所有可能值,该值可能多达8位。仅仅因为您所有的命名枚举值都可以容纳3位,并不意味着InstalledCapacity
的所有可能值都可以容纳到位集中。 255
的值对枚举是完全有效的,但不能放入您的位集中。