"x"和L'x"和"x"之间的关系
Relationship between 'x' and L'x' and widen('x')
设x
为基本源字符集的任意成员。'x'
和L'x'
分别是基本执行字符集和基本执行宽字符集的成员。
'x'
和L'x'
的整数值一定相等吗?看起来标准没有要求这个,这是有道理的。例如,可以使用EBCDIC作为窄字符集,使用Unicode作为宽字符集。
在某些(或任何)语言环境中,std::use_facet<std::ctype<wchar_t>>(std::locale()).widen('x')
是否应该等于L'x'
?在这种情况下,要求是有意义的,但我在标准中也找不到这样的要求。同样,std::use_facet<std::ctype<wchar_t>>(std::locale()).narrow(L'x')
是否与'x'
相同?
如果上面的选项不成立,那么
std::wcout << L'x';
std::wcout << ct.widen('x');
应该输出x
?ct
是一个合适的区域设置facet。
关于宽字符集在实践中几乎没有什么可以保证的,因为C和c++标准要求所有宽字符都可以用单个编码值表示,而Windows编程中的标准是UTF-16编码的宽文本。最初的Windows宽文本只是原始的16位Unicode,现在称为UCS-2,它仍然在Windows控制台窗口中使用,并且符合C和c++的要求。UTF-16是UCS-2的扩展,它使用两个编码值,称为代理对,用于原始Unicode的基本多语言平面(即BMP)之外的字符。
Re
”
'x'
和L'x'
的整数值一定相等吗?[当x是c++基本源字符集的成员时]
基本的源字符集是ASCII的一个子集,几乎所有现存的通用字符编码,特别是Unicode编码,都是ASCII的扩展。有一个例外,即IBM的EBCDIC字符编码(有多种变体)。然而,如果它仍然在使用,那也是在IBM大型机上。
因此,在实践中,你有这种保证,但在正式场合,你没有。更重要的是,它与无关。例如,基本源字符集缺少$符号,如果没有$符号,你很难做到这一点,也就是说,将自己限制在基本源字符集上并不是一个实际的主张。
Re
”在某些(或任何)语言环境中,
std::use_facet<std::ctype<wchar_t>>(std::locale()).widen('x')
是否应该等于L'x'
[当x是c++基本源字符集的成员]
由于与字面量相同的原因,在实践中是,在形式中不是(因为支持EBCDIC之类的编码),而且这与实践者无关。
特别地,在实践中,一个更相关的考虑是微软的Visual c++有(未记录的)Windows ANSI作为它的执行字符集,和UTF-16作为宽字符编码。例如,在我的机器上,执行字符集是Windows 1252,又名Windows ANSI west。有些字符,特别是€,有完全不同的Unicode字符编码。更糟糕的是,可能只有一些狭窄的字符集可以用作执行字符集,其中某些字符的UTF-16编码将使用编码值的代理对。在这种情况下,widen
甚至不能表示结果;
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 移动语义和深层/浅层复制之间有什么关系?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 超市管理系统的类别之间应该是什么关系?
- 指针和程序性能之间有什么关系吗?
- node.h/node.cpp/nodelist.cpp之间的关系
- 运行线程和线程对象之间的关系
- 类型大小与其值范围之间的关系?
- 2个期货之间的依赖关系
- Qt:工作线程和 GUI 事件之间的关系
- 如何强制 qbs 产品与依赖关系之间的同步?
- 在头文件和 .cc 文件之间建立关系
- C 和Windows OS之间的关系
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- QComboBox 在 editTextChanged 和 currentIndexChanged 之间的关系
- 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用
- 各种初始化和构造之间的关系
- 变量之间的关系
- 有符号整数类型的最小值和最大值之间关系的C++标准保证是什么