当我尝试使用各种非标准方法为std::numeric_limits<size_t>::max()
allocator::max_size()
时,Clang向我提到了这件事。
表达式大小似乎限制在4个字节,因此它看起来非常像一个impl定义的多字节字符,但我不知道它是如何工作的。
printf("0x%016hhX\n", '\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,但只有-Wfour-char-constants
的第4行警告才会打开-Weveryting
。为什么4字节字符必须警告其用户?
请解释它的工作原理。它是否有任何口语或可能是规范性的术语?
答案 0 :(得分:3)
C ++标准未定义使用由\
指定并用单引号字符括起的八进制常量的3位以上的行为。 (有趣的是,您可以使用超过2个十六进制数字来定义多字符常量,甚至可以使用'ab'
之类的符号来定义,但是您获得的int
的值是实现定义的。)
请参阅编译器文档以了解更长的八进制常量。