1
如果我为包含通用字符名称的字符串文字省略u8
前缀,会发生什么情况?省略包含通用字符名称的字符串文字的u8前缀
所以不是:
u8"\u00a7some-text"
我写这篇文章:
"\u00a7some-text"
如果我为包含通用字符名称的字符串文字省略u8
前缀,会发生什么情况?省略包含通用字符名称的字符串文字的u8前缀
所以不是:
u8"\u00a7some-text"
我写这篇文章:
"\u00a7some-text"
没有u8
前缀,字符串将在执行字符编码设置你的平台。执行字符集可能是UTF-8(这是多个平台上的默认值),但不能假定为始终为UTF-8(请参阅this answer)。
如果执行字符集不能编码通用字符名称(或字符串字面值中的任何其他值),则结果是实现定义的(即可能导致错误或一些标记值)。例如,考虑的代码:
const char* c = "\u00a7";
当使用GCC 5.3 -fexec-charset=ascii
编译,它失败,错误:
error: converting UCN to execution character set: Invalid or incomplete multibyte or wide character
这是因为U + 00A7不能在ASCII编码。然而,使用u8
前缀:
const char* c = u8"\u00A7";
编译成功,并c
指向字节0xC2
0xA7
0x00
。
如果您使用u8
前缀,那么您的字符串是保证为UTF-8编码,无论平台的配置如何。