我想补充编译时断言到下面的C++代码(编译使用Visual C++ 9):如何在编译时测试常量是否适合类型?
//assumes typedef unsigned char BYTE;
int value = ...;
// Does it fit into BYTE?
if(0 <= value && value <= UCHAR_MAX) {
BYTE asByte = static_cast<BYTE>(value);
//proceed with byte
} else {
//proceed with greater values
}
问题是UCHAR_MAX
和是独立typedef
S和当该代码被移植它可以发生他们不同步并且代码将会中断。所以我想要做这样的事情:
compileTimeAssert(sizeof(BYTE) == sizeof(UCHAR_MAX));
但VC++ 9产生“负标”的错误,而在编译 - sizeof(UCHAR_MAX)
恰好是4,而不是1
我如何能实现编译我想要什么时间检查?
酷。应该是'CHAR_BIT'而不是8。 – sharptooth 2010-09-03 10:36:43
@sharptooth - 更正。 – adamk 2010-09-03 10:39:40
对于'BYTE'这可能是好的,但对于更大的类型不会溢出? – bk1e 2010-09-03 16:05:19