相关疑难解决方法(0)

这个警告与枚举类大小有关吗?

警告:

src/BoardRep.h:49:12: warning: ‘BoardRep::BoardRep::Row::<anonymous struct>::a’ 
is too small to hold all values of ‘enum class BoardRep::Piece’ 
[enabled by default]
Piece a:2;
        ^
Run Code Online (Sandbox Code Playgroud)

枚举:

enum class Piece: unsigned char {
    EMPTY,
    WHITE,
    BLACK
};
Run Code Online (Sandbox Code Playgroud)

使用:

union Row {
    struct {
        Piece a:2;
        Piece b:2;
        Piece c:2;
        Piece d:2;
        Piece e:2;
        Piece f:2;
        Piece g:2;
        Piece h:2;
    };
    unsigned short raw;
};
Run Code Online (Sandbox Code Playgroud)

如果enum我同意GCC,它可能不得不截断,但这是因为enums与整数和预处理器定义并没有真正分开.然而,一个enum class更强大.如果它不够强大,不能假设所有Piece取整数值都在0到2之间,则警告是有意义的.否则海湾合作委员会将不必要地挑剔,可能值得邮寄清单说"看,这是一个愚蠢的警告"

任何人都看不到这一点

您可以在2位数据中存储4个不同的值,我只需要3个不同的值,因此任何长度为4或更小的枚举应该很好地适合给定的2位(并且我的枚举确实"派生"(更好的术语?)来自无符号类型).如果我有5个或更多那么我会期待一个警告.

c++ enums gcc c++11

5
推荐指数
2
解决办法
1249
查看次数

标签 统计

c++ ×1

c++11 ×1

enums ×1

gcc ×1