2012-12-04 41 views
5

在我的系統,wchar_t的和INT是不同的類型具有相同屬性:wchar_t是否保證與任何整數類型不同?

#include <type_traits> 
sizeof(wchar_t) == sizeof(int) == 4 
std::is_signed<wchar_t> == std::is_signed<int> == std::true_type 
std::is_same<wchar_t, int> == std::false_type 

相反,ptrdiff_tlong int是相同類型(相同的屬性,並且is_same爲true)。

是否保證了wchar_t的獨特性?所有系統上的wchar_tint超載是否安全?除之外,在其他地方是否有任何屬性區分wchar_t和相應的int屬性? (系統信息:我對一般情況很感興趣,但到目前爲止,我的測試已經在運行g ++ 4.8.0和Apple clang ++ 4.1的OS X機器上運行,兩者均使用-std = C++ 11。)

回答

9

是,wchar_t保證是一個不同類型(§3.9.1/ 5):

wchar_t類型是獨特的類型,它們的值可以表示不同的代碼最大擴展字符集的所有成員在支持的語言環境中指定(22.3.1)。

所以是的,在所有系統上對於wchar_tint超載是安全的。

但是,wchar_t也保證具有與另一整數類型相同的大小,符號和對齊要求,這是的基本類型。這不一定是int,但在你的情況似乎是。這意味着wchar_t可能是使用其中一種整型實現的,但就您而言,它們被視爲完全不同的類型。

+0

簡短,甜美,並重點。我會盡快接受答案。 – addaon

8

是的,對於C++ 11,wchar_t是它自己的類型,不同於任何其他類型,但正如您所看到的,它也會具有與其他類型相同的範圍,簽名等等(§3.9 .1/3):

類型wchar_t是一種不同的類型,其值可以表示支持的語言環境(22.3.1)中指定的最大擴展字符集的所有成員的不同代碼。類型wchar_t應具有與其他整型類型相同的大小,符號和對齊要求(3.11),稱爲其基礎 類型。

相關問題