十六进制转义序列的最大长度
Maximum length of hexadecimal escape sequence
请考虑以下代码片段:
#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 标准 说:
十六进制序列中的位数没有限制。
但同时包含对可能的字符文字类型的限制:char
、wchar_t
、char16_t
或char32_t
。这意味着可能类型的最大大小不超过 32 位。即十六进制序列(仅十六进制数字部分)的最大长度限制为 8。
我的问题是:为什么标准说十六进制序列的无限长度以及如何使用超过 8 位数字的十六进制序列?
编译器供应商可能希望提供 8 字节字符类型作为扩展。
对字符文本施加限制将阻止使用文本启动这些类型。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 指针的提升序列化保存指针的十六进制值,而不是对象的内容
- 以十进制、八进制和十六进制表示法标识整数文本是否与转义字符中的整数文本相同
- 十六进制转义序列的最大长度
- 增强数据的序列化十六进制十进制编码
- 可以使用十六进制颜色值与vt100转义码c++
- 如何获得序列号的证书十六进制格式字符串使用cryptoapi
- 告诉字符串中转义的十六进制结束位置
- 以十六进制或十进制形式将std::字符串作为字节序列打印到stdout
- c++编译器什么时候开始考虑在字符串转义中使用两个以上的十六进制数字?