考虑以下代码:
template<bool> class StaticAssert;
template<> class StaticAssert<true> {};
StaticAssert< (-1 < sizeof(int)) > xyz1; // Compile error
StaticAssert< (-1 > sizeof(int)) > xyz2; // OK
为什么 -1 > sizeof(int)
会是 true?
- 是否正确的理解为
-1
被提升为unsigned(-1)
,再比较unsigned(-1) > sizeof(int)
。 - 是否正确的理解为当 sizeof(int) 等于 4 时,
-1 > sizeof(int)
等价于-1 > size_t(4)
。如果这样的话,为什么-1 > size_t(4)
是 false?
size_t
是一种无符号整数类型,并不一定意味着int
不能表示size_t
的所有值(size_t
可能是unsigned short
),尽管在提问者的平台上显然不能这样做。 - CB Bailey(unsigned T)-1
不仅仅是一个很大的值,它是unsigned T
可以保存的最大值。 - GManNickG