有没有办法让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中的一个错误.感谢詹姆斯提示.
你可以试试:
enum EEE {
X1 = 1,
XN = -1ULL
};
Run Code Online (Sandbox Code Playgroud)
如果没有U,则整数文字被签名.
(这当然假设您的实现支持long long;我认为它确实使用了原始问题LL;否则,您可以使用ULa long).