Lig*_*ica 12 c++ language-lawyer c++11
注意:我确信有人会称之为主观,但我认为这是相当有形的.
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
术语一样不符合数字的数字least
表示固定宽度类型.
那么,我的问题是:我想象的是,或者这些名字是否存在根本缺陷?
Ker*_* SB 15
您引用的命名约定(uint32_t
,int_fast32_t
等)实际上仅用于typedef,而不用于基本类型.原始整数类型是{signed,unsigned} {char,short,int,long,long long},{而不是float或decimal类型} ...
然而,除了那些整数类型,有四个不同的,独特的,基本类型,char
,wchar_t
,char16_t
和char32_t
,它们是类型各自的文字的''
,L''
,u''
和U''
,并用于字母数字型数据,同样地,对于那些的阵列.这些类型当然也是整数类型,因此它们在某些算术整数类型上具有相同的布局,但是语言在前者,算术类型(将用于计算)和后者之间做出非常明确的区分. "字符"类型,它们构成某种I/O数据的基本单元.
因此,我认为char16_t
并且char32_t
实际上非常恰当地命名以反映它们属于整数类型的"char"族的事实.
归档时间: |
|
查看次数: |
4310 次 |
最近记录: |