我已经研究了一段时间的规范文件,但没有找到任何明确的条款来支持是或否。
以下陈述是否有效:
char16_t *s = u"asdf";
这意味着/强制要求字符串字面量 "asdf" 必须以 UTF-16 编码吗?
从我所能推断的来看,答案是肯定的。
然而,在这个提案n2018中,它说只有在定义了 "__STDC_UTF_16__
" 时,char16_t
字面量才被编码为 UTF-16,这就留下了一个可能性,即当未定义 "__STDC_UTF_16__
" 时,char16_t
字面量可以以编译器想要的任何方式进行编码。
毕竟,标准只保证了 char16_t
的大小、符号和底层表示,它没有提到编译器必须如何编码 char16_t
字面量或字符串字面量。
在规范中,它说:
char16_t
字符串字面量的大小是转义序列、通用字符名称和其他字符的总数,加上每个需要代理对的字符一个,再加上终止符u'\0'一个。[注意:char16_t
字符串字面量的大小是代码单元的数量,而不是字符的数量。 —end note]
这似乎意味着假定char16_t
字符串字面量是UTF16编码,因为“代理对”是UTF-16的概念。
如果问题中有任何含糊不清之处,请告诉我。