C++ 是否允许 8 字节长的多字符文字?
Does C++ allow 8 byte long multi-character literals?
为什么允许这样做:
uint32_t x = 'name';
但这被截断为 32 位:
uint64_t x = 'namename';
有没有办法得到一个 8 字节长的多字符文字?
可以,只要你的编译器有 8 字节 int
s 并且支持它。
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 个文字。
为什么允许这样做:
uint32_t x = 'name';
但这被截断为 32 位:
uint64_t x = 'namename';
有没有办法得到一个 8 字节长的多字符文字?
可以,只要你的编译器有 8 字节 int
s 并且支持它。
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 个文字。