十六进制转义序列的最大长度

Maximum length of hexadecimal escape sequence

本文关键字:转义序列 十六进制      更新时间:2023-10-16

请考虑以下代码片段:

#include <iostream>
template <class T>
void print(const T& t) {
    std::cout << static_cast<unsigned long long>(t) << " " << sizeof(t) << "n";
}
int main() {
    auto cU = U'xFFFFFFFF';
    auto cL = L'xFFFFFFFF';
    auto cQ = 'xFFFFFFFF1'; // warning in gcc; error in clang
    print(cU);
    print(cL);
    print(cQ);
}

这段代码在 gcc 中编译时给了我一个警告,并且在 clang 中使用相同的文本出错:

十六进制转义序列超出范围

2.14.3/4 的 C++14 标准 说:

十六进制序列中的位数没有限制。

但同时包含对可能的字符文字类型的限制:charwchar_tchar16_tchar32_t。这意味着可能类型的最大大小不超过 32 位。即十六进制序列(仅十六进制数字部分)的最大长度限制为 8。

我的问题是:为什么标准说十六进制序列的无限长度以及如何使用超过 8 位数字的十六进制序列?

编译器供应商可能希望提供 8 字节字符类型作为扩展。

对字符文本施加限制将阻止使用文本启动这些类型。