0

std::numeric_limits<size_t>::max()当我尝试一些非标准的方法来为我寻找时,Clang 向我提到了这个东西allocator::max_size()

表达式大小似乎限制在 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 但只有第 4 行警告-Wfour-char-constants是否打开-Weveryting。为什么 4-byte char 必须警告它的用户?

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

godbolt.org/g/7AR9nw

4

1 回答 1

3

\C++ 标准未定义使用由单引号字符指定并包含在八进制常量中的多于 3 位数字的行为。(有趣的是,您可以使用超过 2 个十六进制数字定义多字符常量,或者甚至像这样的符号,'ab'int您获得的值是实现定义的。)

请查阅您的编译器文档以处理更长的八进制常数。

于 2018-04-11T10:56:02.727 回答