__STDC_ISO_10646__到底是什么意思
What does __STDC_ISO_10646__ exactly mean?
我很难理解宏__STDC_ISO_10646__
,从我的C++标准副本:
__STDC_ISO_10646__
格式为 yyyymmL 的整数常量(例如,199712L)。如果 这个符号被定义,那么Unicode中的每个字符都需要 当存储在类型为 wchar_t 的对象中时,set 具有与 该字符的短标识符。所需的 Unicode 集 由 ISO/IEC 10646 定义的所有字符组成, 以及指定的所有修订和技术勘误 年和月。
根据我的理解,这意味着系统上wchar_t
将代表 unicode 代码点。这是对的吗?如果是这种情况,那么 utf-8 和 utf-16 编码将不符合,而 utf-32 将符合对吗?另外,还有哪些其他字符编码符合要求?
您引用的标准部分(§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
,则它们可能会受到向后兼容性的阻碍。
当 unicode 字符存储在 wchar_t 中时,该宏与该字符的值相关。
更具体地说,ISO/IEC 10646标准支持更多字符,因为对标准进行了修正。
可以定义为宏值的年份和月份意味着,当您将 Unicode 字符存储到wchar_t变量时,将存储在该变量中的 unicode 字符的值将是给定年份和月份中有效的值。
有关 Unicode 短标识符的参考,请参阅此处[http://www.unicode.org/charts/][1]
希望这有帮助
莱夫特里斯
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思