wchar_t是否保证与任何整数类型不同?

时间:2012-12-04 19:09:04

标签: c++ c++11 wchar-t

在我的系统上,wchar_t和int是具有相同属性的不同类型:

#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为真)。

wchar_t的这种独特性是否得到保证?在所有系统上wchar_tint重载是否安全?除了wchar_t之外,是否有任何属性可以区分is_same和相应的int属性?

(系统信息:我对一般情况感兴趣,但到目前为止,我的测试是在运行g ++ 4.8.0和Apple clang ++ 4.1的OS X机器上,两者都使用-std = c ++ 11。)< / p>

2 个答案:

答案 0 :(得分:9)

是的,wchar_t保证是一种独特的类型(§3.9.1/ 5):

  

类型wchar_t是一种不同的类型,其值可以表示支持的语言环境(22.3.1)中指定的最大扩展字符集的所有成员的不同代码。

是的,在所有系统上对wchar_tint重载是安全的。

但是,wchar_t也保证具有与另一个整数类型相同的大小,符号和对齐要求,即底层类型。这不一定是int,但在您的情况下似乎是wchar_t。这意味着{{1}}可能是使用其中一种整数类型实现的,但就您而言,它们被视为完全不同的类型。

答案 1 :(得分:8)

是的,对于C ++ 11,wchar_t是它自己的类型,与其他类型不同,但正如您所观察到的,它也将具有与其他类型相同的范围,签名等(§3.9。 1/3):

  

类型wchar_t是一种不同的类型,其值可以表示支持的语言环境(22.3.1)中指定的最大扩展字符集的所有成员的不同代码。类型wchar_t应具有与其他整数类型相同的大小,符号和对齐要求(3.11),称为其基础   类型。