В дизайне здесь просто «не один разум», потому что целочисленные данные и символьные данные из 16 бит теперь дифференцируемы, но целочисленные и символьные данные из 8 бит не являются.Почему wchar_t/unsigned short теперь отличается, но нет аналогичного отличия в байтах/без знака?
У C++ всегда был единственный выбор для 8-битовых значений a '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-разрядное целое число типа введено, что позволило бы более интеллектуальных перегрузок и перегрузок, которые ведут себя более аналогичным образом, независимо от того, если вы используете узкие или широкие строки ,
Если бы вы сказали, что 'wchar_t' не должен быть 16 бит? Или даже быть 2 байтами в уверенной среде CHAR_BIT == 8? –
Или что 'wchar_t' /' unsigned short' всегда отличались? –
Я полагаю, что на самом деле неважно, насколько широк wchar_t, точнее, его нельзя путать с целым числом, в отличие от char. Кроме того, char16_t и char32_t тоже есть. – VoidStar