注意:我敢肯定有人会称这是主观的,但我认为这是相当有形的。
C++11 为我们提供了新的basic_string
类型std::u16string
和,分别为和提供了std::u32string
类型别名。std::basic_string<char16_t>
std::basic_string<char32_t>
在这种情况下,子字符串的使用"u16"
对"u32"
我来说意味着“UTF-16”和“UTF-32”,这很愚蠢,因为C++当然没有文本编码的概念。
这些名称实际上反映了字符类型char16_t
和char32_t
,但这些名称似乎有误。它们是无符号的,因为它们的底层类型是无符号的:
[C++11: 3.9.1/5]:
[..] 类型char16_t
和char32_t
表示具有相同大小、符号和对齐方式的不同类型uint_least16_t
和uint_least32_t
,分别 [..]
但在我看来,这些名称违反了这样的约定,即此类无符号类型的名称开头'u'
为 ,并且使用诸如16
unqualified 之类的数字之类的术语least
表示固定宽度类型。
那么,我的问题是:我是在想象事物,还是这些名字从根本上存在缺陷?