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

时间:2016-02-02 12:01:13

标签: c++ hex language-lawyer

请考虑以下代码段:

#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.

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

1 个答案:

答案 0 :(得分:1)

您的编译器供应商可能希望提出一个8字节字符类型作为扩展名。

对字符 literal 设置限制会阻止使用文字对这些类型进行初始化。