數值型
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;
輸出結果: