这与Are C++ enums signed or unsigned?. 根据 JavaMan 的回答, an enum
is notsigned
也不是unsigned
。但它确实遵循整体提升规则。
我正在使用一个库,该库使用enums
然后将它们传递给其他主要unsigned
类型的类对象(如unsigned int
和size_t
)。由于语言规则,启用-Wsign-conversion
警告以捕捉合法错误会导致许多误报。
这种规则创造了一种难以确保类型安全和捕捉常见错误的情况。这很困难,因为我想避免static_cast
在整个代码中随意散布之类的东西。
有没有办法覆盖语言的默认行为以提升enums
为具体signed
或unsigned
类型?(类似于您可以指定 achar
是有符号还是无符号的方式)。
相关的是,该库是在 1990 年代编写的,因此它支持许多较旧的编译器。如果解决方案甚至可以解决 C++03 甚至更早的问题,那就太好了。
从如何保护 C++03 和 C++11 的移动构造函数?,我知道在实践中没有可靠的方法来检测其他 C++ 语言变体何时生效。在使用 Clang 3.5-std=c++03
和-std=c++11
.