有没有办法让`enum`类型无符号?

Kir*_*sky 10 c++ enums

有没有办法让enum类型无符号?以下代码向我发出有关签名/未签名比较的警告.

enum EEE {
    X1 = 1
};

int main()
{
    size_t x = 2;
    EEE t = X1;
    if ( t < x ) std::cout << "ok" << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图强制编译器使用unsigned底层类型进行枚举,具体如下:

enum EEE {
    X1 = 1,
    XN = 18446744073709551615LL
    // I've tried XN = UINT_MAX (in Visual Studio). Same warning.
};
Run Code Online (Sandbox Code Playgroud)

但这仍然是警告.


改变常量UINT_MAX使其在GNU C++中工作,应该按照标准.似乎是VS中的一个错误.感谢詹姆斯提示.

Jam*_*lis 8

你可以试试:

enum EEE {
    X1 = 1,
    XN = -1ULL
};
Run Code Online (Sandbox Code Playgroud)

如果没有U,则整数文字被签名.

(这当然假设您的实现支持long long;我认为它确实使用了原始问题LL;否则,您可以使用ULa long).