【发布时间】:2015-01-03 17:03:48
【问题描述】:
这里的设计看起来像是“没有一个想法”,因为现在 16 位的整数数据和字符数据是可微分的,而 8 位的整数和字符数据则不可微分。
对于 8 位值,C++ 始终只能选择 '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 位,你会不会大吃一惊?或者在一个确定的CHAR_BIT==8环境中甚至是 2 个字节? -
或者说
wchar_t/unsigned short一直是不同的? -
我想 wchar_t 有多宽并不重要,关键是,它不能与整数混淆,不像 char。另外,char16_t 和 char32_t 也是。
-
16 位
wchar_t听起来像是一个可怕的替代现实.. -
如果您是从头开始设计语言,不关心向后兼容性,那么使用(一种可能性)类似模板的表示法会有很多话要说,所以你可以有 @ 987654327@ 或
char<N>,其中N可以是 8 到至少 64 的 2 的任何幂。只有两个名称,您将提供所有char、short、int、long, 和long long,它会简单且系统化,因此整数和字符类型之间的区别将与大小解耦。还没有发生,并且考虑到向后兼容性的限制,它可能也永远不会发生。