标准中间接禁止使用可变长度编码.
所以我有几个问题:
如何处理标准的以下部分?
17.3.2.1.3.3宽字符序列
宽字符序列是一个数组对象(8.3.4)A,可以声明为TA [N],其中T是wchar_t(3.9.1)类型,可选择由const或volatile的任意组合限定.数组的初始元素定义了内容,包括由某个谓词确定的元素.字符序列可以由指定其第一元素的指针值S指定.
NTWCS的长度是终止空宽字符之前的元素数.空NTWCS的长度为零.
问题:
basic_string<wchar_t>
operator[]实施以及它返回了什么?
If pos < size(), returns data()[pos]. Otherwise, if pos == size(), the const version returns charT(). Otherwise, the behavior is undefined.size()返回元素的数量还是字符串的长度?
Returns: a count of the number of char-like objects currently in the string.resize()工作怎么样?
insert(),erase()和其他处理?cwctype
cwchar
getwchar() 显然无法返回整个平台 - 角色,那么这是如何工作的?加上所有其余的角色功能(主题是相同的).
编辑:我将打开奖金以获得一些确认.我希望得到一些明确的答案或至少更明确的投票分配.
编辑:这开始变得毫无意义.这充满了完全相互矛盾的答案.你们有些人谈论外部编码(我不关心那些,UTF-8编码仍然会被存储为UTF-16一旦读入字符串,输出相同),其余只是相互矛盾.: - /
MSa*_*ers 15
以下是Microsoft的STL实现如何处理可变长度编码:
basic_string<wchar_t>::operator[])( 可以单独返回低或高代理.
basic_string<wchar_t>::size()返回wchar_t对象的数量.代理对(一个Unicode字符)使用两个wchar_t,因此会增加两个大小.
basic_string<wchar_t>::resize() 可以截断代理对中间的字符串.
basic_string<wchar_t>::insert() 可以插入代理对的中间.
basic_string<wchar_t>::erase() 可以删除代理对的一半.
通常,模式应该是明确的:STL不假设a std::wstring是UTF-16,也不强制它仍然是UTF-16.
STL将字符串作为字符数组的包装器处理,因此STL字符串上的size()或length()将告诉您它包含多少个char或wchar_t元素,而不一定是字符串中可打印字符的数量.
| 归档时间: |
|
| 查看次数: |
813 次 |
| 最近记录: |