C++ 是否允许 8 字节长的多字符文字?

Does C++ allow 8 byte long multi-character literals?

为什么允许这样做:

uint32_t x = 'name';

但这被截断为 32 位:

uint64_t x = 'namename';

有没有办法得到一个 8 字节长的多字符文字?

可以,只要你的编译器有 8 字节 ints 并且支持它。

C++ 标准对于多字符文字非常简洁。这就是它在这个问题上的全部内容 (C++14, 2.14.3/1):

An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal, or an ordinary character literal containing a single c-char not representable in the execution character set, is conditionally-supported, has type int, and has an implementation-defined value.

(强调我的)

如您所见,几乎所有标准都说,如果支持多字符文字(不一定非要支持),则它们的类型为 int。该值由编译器决定。

如果只支持4字节的多字符文字,你可以使用:

uint64_t x = (((uint64_t)'abcd') << 32) + 'efgh';

但它最终可能会变成 2 个文字。