我想補充編譯時斷言到下面的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