我正在使用 MS Visual Studio 2017 并且(如预期的那样)我收到编译器警告:
Warning C4244 '=': conversion from 'unsigned long' to 'unsigned short', possible loss of data
在这个 C++ 代码上:
unsigned long test32{70000};
unsigned short test16;
test16 = test32;
但是,当我使用 cstdint typedefs 时:
uint32_t test32{70000};
uint16_t test16;
test16 = test32;
...我根本没有收到任何编译器警告。为什么?
此外,作为一种严格类型的语言,C++ 编译器不应该给我错误而不是警告这些方法中的任何一种(并强制我在第三行赋值之前将 32 位值显式转换为 16 位)?