有些類型是相同的,有些是明顯的(=不相同):
- 爲
char
,加入signed
和unsigned
給你總共有三種不同的類型。
- 對於
short
,int
,long
和long long
,signed
暗示,並且增加了什麼都不做。添加unsigned
將爲您提供一組新的不同類型。
unsigned
,short
,long
和long long
可以跟int
,但如果int
有與否不給不同的類型。
原則上,所有不同類型的typeid
應該是不同的。這意味着模板和函數重載解析將把它們視爲不同的類型,而例如,通過short
和short int
都會調用相同的過載。
據我所知,這些規則是相同的C和C + +。如果我犯了一個錯誤,請告訴我,我正在把它寫在我頭頂。
要檢查這一點,您可以使用static_assert
結合std::is_same
的編譯時檢查:
#include <type_traits>
using std::is_same;
static_assert(!is_same<char, signed char>(), "");
static_assert(!is_same<char, unsigned char>(), "");
static_assert(!is_same<unsigned char, signed char>(), "");
static_assert(is_same<short, signed short>(), "");
static_assert(is_same<int, signed int>(), "");
static_assert(is_same<long, signed long>(), "");
static_assert(is_same<long long, signed long long>(), "");
static_assert(!is_same<short, unsigned short>(), "");
static_assert(!is_same<int, unsigned int>(), "");
static_assert(!is_same<long, unsigned long>(), "");
static_assert(!is_same<long long, unsigned long long>(), "");
static_assert(is_same<unsigned int, unsigned>(), "");
static_assert(is_same<short int, short>(), "");
static_assert(is_same<long int, long>(), "");
static_assert(is_same<long long int, long long>(), "");
int main(){} // only included to make the program link
Live demo here。
C中沒有'typeid'同樣在C中,'unsigned int'絕對不是'signed int'的類型,'signed char'不必與'char'是同一類型,那麼你的問題又是什麼? –
C中類型不同的問題仍然適用。 'typeid'只是類型標識的運行時表現形式。一個問題在問題主體中清楚地說明,順便說一句,沒有必要爲「不清楚你要問的東西」而結束投票...... – rubenvb
相關:[所有版本的C中都有簽名,無符號,長和短的所有有效類型和C++?](http://stackoverflow.com/questions/22493879/are-signed-unsigned-long-and-short-all-valid-types-in-all-versions-of-c-and-c) –