__STDC_ISO_10646__究竟是什么意思?

时间:2012-09-25 20:04:54

标签: c++ unicode

我很难从我的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将符合正确吗?还有哪些其他字符编码符合?

2 个答案:

答案 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