#include <iostream>
#include <cstdint>
using namespace std;
static_assert(-1 == numeric_limits<uint64_t>::max()); // ok
static_assert(-1 == numeric_limits<uint32_t>::max()); // ok
static_assert(-1 == numeric_limits<uint16_t>::max()); // error
int main()
{
cout << numeric_limits<uint16_t>::max() << endl;
cout << uint16_t(-1) << endl;
}
输出:
65535
65535
为什么numeric_limits<uint16_t>::max()
不等于-1?
更新:
根据cppref:
同样,USHRT_MAX可能不是无符号类型:其类型可能是int。