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