是`char16_t`和`char32_t`用词不当?

Lig*_*ica 12 c++ language-lawyer c++11

注意:我确信有人会称之为主观,但我认为这是相当有形的.

C++ 11为我们提供了新的basic_string类型std::u16stringstd::u32string,类型别名std::basic_string<char16_t>std::basic_string<char32_t>分别.

在这种情况下使用子串"u16""u32"我的意思是"UTF-16"和"UTF-32",这很愚蠢,因为C++当然没有文本编码的概念.

其实名字体现人物类型char16_tchar32_t,但这些似乎名不副实.由于其基础类型的无符号性,它们无符号的:

[C++11: 3.9.1/5]:[..]类型char16_tchar32_t表示不同类型与大小相同,符号性,和对准如uint_least16_tuint_least32_t,分别[..]

但是在我看来,这些名称违反了这样的约定,即这种无符号类型的名称开头'u',并且使用像16术语一样不符合数字的数字least表示固定宽度类型.

那么,我的问题是:我想象的是,或者这些名字是否存在根本缺陷?

Ker*_* SB 15

您引用的命名约定(uint32_t,int_fast32_t等)实际上仅用于typedef,而不用于基本类型.原始整数类型是{signed,unsigned} {char,short,int,long,long long},{而不是float或decimal类型} ...

然而,除了那些整数类型,有四个不同的,独特的,基本类型,char,wchar_t,char16_tchar32_t,它们是类型各自的文字的'',L'',u''U'',并用于字母数字型数据,同样地,对于那些的阵列.这些类型当然也是整数类型,因此它们在某些算术整数类型上具有相同的布局,但是语言在前者,算术类型(将用于计算)和后者之间做出非常明确的区分. "字符"类型,它们构成某种I/O数据的基本单元.

(我以前在这里这里对这些新类型进行过漫步.)

因此,我认为char16_t并且char32_t实际上非常恰当地命名以反映它们属于整数类型的"char"族的事实.