我有一个无法解决的问题。假设我有这个地图定义:

map<string, int16_t> Registers;


但有时,我需要存储一个未签名的int16_t而不是一个已签名的int16_t。
我怎样才能做到这一点?

谢谢。

最佳答案

您可以使用更大的鱼类型(例如int32_t),也可以使用boost::variant

int32_t可以存储int16_tuint16_t可以存储的所有值,并且保留例如32768和-32768之间的差异(假设为二进制补码)。如果对int16_tuint16_t使用了某些强制转换方案,则两者之间的差异将丢失,因为两者都将存储为0x8000。区分0x8000之类的值将需要带外信息,如果有,您将不会提及。

但是,int32_t不会保留32767有符号和32767无符号之间的差异。如果那很重要,那么boost::variant可以保留该信息。

09-06 20:34