我很难从我的C ++标准副本中理解宏__STDC_ISO_10646__
:
__STDC_ISO_10646__
yyyymmL形式的整数常量(例如,199712L)。如果 定义此符号,然后Unicode中的每个字符都需要 当存储在wchar_t类型的对象中时,set具有与之相同的值 该角色的短标识符。 Unicode必需集 由ISO / IEC 10646定义的所有字符组成, 以及所指定的所有修正案和技术勘误 年和月。
根据我的理解,这意味着您系统上的wchar_t
代表一个unicode代码点。它是否正确?如果是这种情况,那么utf-8和utf-16编码将不符合,utf-32将符合正确吗?还有哪些其他字符编码符合?
答案 0 :(得分:4)
您引用的标准部分(§16.8预定义宏名称[cpp.predefined])为这些定义系列添加前缀:
¶2以下宏名称由实现有条件地定义:
这意味着如果实现无法满足要求(例如因为wchar_t
是16位类型),那么实现将不会定义__STDC_ISO_10646__
。
另一方面,如果wchar_t
是32位或更大的类型,那么实现可能能够定义宏。 ISO 10646仅需要21位来表示所有字符,但对于(几乎)所有实际目的,这意味着16位wchar_t
太小而32位wchar_t
足够大。这也意味着从头开始实现可能会使wchar_t
成为32位类型。如果在此选项标准化之前选择16位wchar_t
,则预先存在的实现可能会受到向后兼容性的影响。
答案 1 :(得分:1)
当宏存储在wchar_t中时,宏与unicode字符的值有关。
更具体地说,ISO / IEC 10646标准支持更多字符,因为对标准进行了修改。
您可以定义为宏值的年份和月份意味着当您将Unicode字符存储到wchar_t变量时,将存储在该变量中的unicode字符的值将是那个在给定的年份和月份生效。
请参阅此处[http://www.unicode.org/charts/][1]
以获取Unicode短标识符的参考
希望这有帮助
Lefteris