多字节字符'377777'如何工作?



Clang 在尝试各种非 std 方法为我的allocator::max_size()找到std::numeric_limits<size_t>::max()时向我提到了这件事

表达式大小似乎限制在 4 个字节,所以它看起来很像 impl 定义的多字节字符,但我不知道它是如何工作的。

printf("0x%016hhXn", '377');     // 0x00000000000000FF
printf("0x%016X  n", '3777');    // 0x000000000000FF37
printf("0x%016X  n", '37777');   // 0x0000000000FF3737
printf("0x%016X  n", '377777');  // 0x00000000FF373737 [-Wfour-char-constants]
printf("0x%016X  n", '3777777'); // 0x0000000037373737 [ too long ]
printf("0x%016X  n", '3777777'); // 0x0000000037373737 [ too long ]

2 - 4 行似乎都返回 int,但只有第 4 行警告-Wfour-char-constants如果打开-Weveryting。为什么 4 字节字符必须警告其用户?

请解释它是如何工作的。它是否有任何口语或可能是规范性的术语?

godbolt.org/g/7AR9nw

使用超过 3 个数字且八进制常量由 指定并括在单引号字符中的行为未由 C++ 标准定义。(有趣的是,您可以使用超过 2 个十六进制数字定义多字符常量,甚至可以使用像 'ab' 这样的表示法来定义多字符常量,但您获得的int的值是实现定义的。

请参阅编译器文档,了解如何处理较长的八进制常量。

相关内容

  • 没有找到相关文章

最新更新