在今天早些时候我看过的有关Unicode的演讲中,当您尝试分配太长而无法由char16_t类型表示的字符文字时,应该发生什么困惑。演示者说,基于对该标准的阅读,该程序应该格式不正确,但是gcc仍然接受它。他没有澄清,Youtube也不允许我问问题。

我自己的测试确认以下代码已被g++-4.8和g++-4.9接受。 (带有警告。)

int main() {
  char16_t a = u'\U0001F378';
}

http://coliru.stacked-crooked.com/a/6cb2206660407a8d
https://eval.in/188979

另一方面,clang 3.4会产生错误。

哪个编译器正确?我找不到这章和诗句。

另一个小问题,字符文字第§2.14.3节没有在W语法或节正文中提及\u\U转义序列。这是疏忽吗?

最佳答案

程序格式错误,应无法编译。



强调我的。

2.14.3 含义内的\u\U不是转义序列。它们是通用字符名称,在 2.3 / 2 中进行了描述。它们不仅限于字符和字符串文字,还可以出现anywhere in the program:

int main() {
    int \u0410 = 42;
    return \u0410;
}
\u0410A,又称西里尔大写字母A。

10-08 08:55