在《C++程序设计语言》第四版的6.2.6节中,提到可以使用R、L和u前缀的组合,例如uR"**(foo\(bar))**"。请注意,在字符(unsigned)和字符串UTF-32编码(§7.3.2.2)中,U前缀的含义有很大的区别。作者在这里想表达什么意思我不太明白。实际上,U前缀的字符字面值包含引用字符的ISO-10646代码点值,这与字符串字面值的U前缀基本相同,与“unsigned”的概念无关。
unsigned
是 C++ 的关键字,意味着在大多数情况下声明后面的整数类型只有正值。
参考链接: http://en.cppreference.com/w/cpp/language/types
现在对于 char 和 char[],你有:
char16_t c = u'\u00F6';
char32_t d = U'\U0010FFFF';
char16_t C[] = u"Hell\u00F6";
char32_t D[] = U"Hell\U000000F6\U0010FFFF";
关于字符串字面值的进一步参考: C++11中字符串字面值的Unicode编码
因此,确实在u
和U
以及unsigned
之间存在一些差异,但我认为这并不算太大的差别。
U"hello"
是一个char32_t const[6]
,而U'h'
则是一个char32_t
。对我来说并没有显著的区别。 - SimpleU
后缀会将其转换为无符号类型。例如:char i = -159U; std::cout << i;
// 输出 "a" - Tristan Brindle