这里的设计似乎“不是一心一意”,因为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位整数类型,语言会更加一致,这样可以实现更智能的重载和重载,无论您使用的是窄字符串还是宽字符串,其行为都会更加相似。
答案 0 :(得分:2)
是的,可能,但是使用不是字符的单字节整数非常罕见,您可以通过整体推广轻松解决您所述的问题(尝试应用一元+
看看会发生什么事。)
值得注意的是,你的前提是有缺陷的:wchar_t
和unsigned short
总是是不同的类型,在C ++ 98中每段3.9.1/5
, C ++ 03,C ++ 11和C ++ 14。