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
的值是实现定义的。
请参阅编译器文档,了解如何处理较长的八进制常量。