为什么wchar_t / unsigned short现在是不同的,但是没有类似的char / unsigned字节区别?

时间:2014-11-07 00:49:00

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

这里的设计似乎“不是一心一意”,因为16位的整数数据和字符数据现在可以区分,但8位的整数和字符数据不是。

C ++一直是8位值'char'的唯一选择。但是将wchar_t识别为来自unsigned short的官方不同类型的功能可以改进,但仅适用于宽字符串用户。这似乎没有协调;对于8位和16位值,语言的行为方式不同。

我认为拥有更多不同类型有明显的价值;具有不同的8位字符AND和8位“字节”将更好,例如用于运算符重载。例如:

// This kind of sucks...
BYTE m = 59;     // This is really 'unsigned char' because there is no other option
cout << m;       // outputs character data ";" because it assumes 8-bits is char data.
                 // This is a consequence of limited ability to overload

// But for wide strings, the behavior is different and better...
unsigned short s = 59;
wcout << s;      // Prints the number "59" like we expect
wchar_t w = L'C'
wcout << w;      // Prints out "C" like we expect

如果引入了新的8位整数类型,语言会更加一致,这样可以实现更智能的重载和重载,无论您使用的是窄字符串还是宽字符串,其行为都会更加相似。

1 个答案:

答案 0 :(得分:2)

是的,可能,但是使用不是字符的单字节整数非常罕见,您可以通过整体推广轻松解决您所述的问题(尝试应用一元+看看会发生什么事。)

值得注意的是,你的前提是有缺陷的:wchar_tunsigned short 总是是不同的类型,在C ++ 98中每段3.9.1/5, C ++ 03,C ++ 11和C ++ 14。