为什么允许这样做:
uint32_t x = 'name';
但这会被截断为32位:
uint64_t x = 'namename';
有没有办法有一个8字节长的多字符文字?
是的,只要你的编译器有8字节的int
s并支持它。
关于多字符文字,C ++标准非常简洁。这就是关于此事的所有内容(C ++ 14,2.14.3 / 1):
包含多个c-char的普通字符文字是多字符文字。包含在执行字符集中无法表示的单个c-char的多字符文字或普通字符文字是有条件支持的,具有类型
int
,并具有实现定义的值。
(强调我的)
如你所见,几乎所有的标准都说如果支持多字符文字(它们不一定是),它们的类型为int
。该值取决于编译器。
如果只支持4个字节的多字符文字,您可以使用:
uint64_t x = (((uint64_t)'abcd') << 32) + 'efgh';
但它最终可能会成为2个文字。