在今天早些时候我看过的有关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;
}
\u0410
是A
,又称西里尔大写字母A。