数值型
c++中,对于 int、long、int64、...等这些数值类型,如果是有符合的,则类型前加不加 signed 其效果都是一样的。
比如如下声明:
int nA; // 与 signed int nA; 声明一样 long nB; // 与signed long nB; 声明一样 int64 nC; // 与signed int64 nC; 声明一样
字符
对于char需要小心。许多人知道 char 与 unsigned char 是不同的,但不一定会知道 char 与 signed char 其实不一定是相同的。为什么?因为编译器对于 char 其识别为是 char 类型,对于 signed char 是识别为 signed char 类型,而不是 char 类型。
或许也正是该点原因,所以char变量在不同的编译器下值可能会不同的根本原因所在(记得在制作xx游戏时,就有遇到过这个坑,N个人查了好久才查出来)。至于编译器为什么如此设计,个人猜测可能是由于历史原因,导致后来的c++标准没办法统一该点标准。
下面请看下面测试代码及测试结果:
1 cout << (typeid(char) == typeid(signed char)) << endl; 2 3 auto vvvv = typeid(char).name(); 4 cout << vvvv << endl; 5 vvvv = typeid(signed char).name(); 6 cout << vvvv << endl; 7 vvvv = typeid(unsigned char).name(); 8 cout << vvvv << endl; 9 10 vvvv = typeid(int).name(); 11 cout << vvvv << endl; 12 vvvv = typeid(signed int).name(); 13 cout << vvvv << endl;
输出结果: