字符字面量的U前缀和字符串字面量的U前缀有什么区别?

8
在《C++程序设计语言》第四版的6.2.6节中,提到可以使用R、L和u前缀的组合,例如uR"**(foo\(bar))**"。请注意,在字符(unsigned)和字符串UTF-32编码(§7.3.2.2)中,U前缀的含义有很大的区别。作者在这里想表达什么意思我不太明白。实际上,U前缀的字符字面值包含引用字符的ISO-10646代码点值,这与字符串字面值的U前缀基本相同,与“unsigned”的概念无关。

我也不太理解。U"hello" 是一个 char32_t const[6],而 U'h' 则是一个 char32_t。对我来说并没有显著的区别。 - Simple
@Simple 也许这本书是错的?或者这只是一个看问题角度不同而你认为差异是否显著的问题? - TobiMcNamobi
我能想到的是,整型字面量上的 U 后缀会将其转换为无符号类型。例如:char i = -159U; std::cout << i; // 输出 "a" - Tristan Brindle
1个回答

0

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编码

因此,确实在uU以及unsigned之间存在一些差异,但我认为这并不算太大的差别。


我可能在原始问题的措辞上表达不清楚。我修改了问题。我知道“unsigned”是C++关键字。对于造成的混淆,我感到抱歉。 - goodbyeera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接