c++是否允许8字节长的多字符字面量?

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

本文关键字:字符 是否 字节 c++      更新时间:2023-10-16

为什么允许:

uint32_t x = 'name';

但是它被截断为32位:

uint64_t x = 'namename';

是否有办法有一个8字节长的多字符文字?

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

c++标准在多字符字面量方面非常简洁。这就是关于这个问题(c++ 14,2.14.3/1)的全部内容:

一个包含多个c-char的普通字符字面量是一个多字符字面量。多字符字面量,或包含单个c-char在执行字符中不可表示的普通字符字面量类型为int ,并且有一个实现定义的值。

(强调我的)

正如你所看到的,几乎所有的标准都说,如果支持多字符字面量(它们不必是),它们的类型是int。该值由编译器决定

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

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

但是最后可能会变成两个字面值