gpt4 book ai didi

c++ - 十六进制或二进制数中的数字之前是否允许使用数字分隔符?

转载 作者:可可西里 更新时间:2023-11-01 18:29:16 26 4
gpt4 key购买 nike

C++14 按照 3'141'592'653'589 的思路将数字分隔符的概念引入到文字中。现在这是可读代码的一个很棒特性,但我想知道它是否允许在 0x/0b 类型文字的数字部分之前引号.在我看来:

unsigned int topThreeBits = 0b'1110'0000;
unsigned int hexNum = 0x'dead'beef;

没有前导分隔符的可读性更好:

unsigned int topThreeBits = 0b1110'0000;
unsigned int hexNum = 0xdead'beef;

因为它清楚地描绘了数字的基数。

由于我还没有 C++14 编译器,我需要以某种方式确认它是否允许这样做。

我知道它对于像 '123'456 这样的无前缀数字没有意义,特别是因为解析器不知道它是否是一个 char 变量或数字文字。

但是,对于带前缀的文字,我看不出在第一个 ' 到达时 token 的含义有任何混淆 - 0x/0b 已经规定它将是一个数字文字。

最佳答案

如果我们查看 draft C++14 standard: N4140 中的语法section 2.14.2 [lex.icon],不允许紧跟在十六进制或二进制文字的基本指示符之后:

binary-literal:
0b binary-digit
0B binary-digit
binary-literal ’opt binary-digit
[...]
hexadecimal-literal:
0x hexadecimal-digit
0X hexadecimal-digit
hexadecimal-literal ’opt hexadecimal-digit

不过,八进制文字确实允许在基本指示符之后使用分隔符:

octal-literal:
0
octal-literal ’opt octal-digit

我们还可以使用提供 C++14 编译器的在线编译器之一进行检查,例如 ColiruWandbox .

跟踪此更改的 Evolution Working Group 问题是 issue 27: N3781 Single-Quotation-Mark as a Digit Separator, N3661, N3499 Digit Separators, N3448 Painless Digit Separation .我没有看到这个设计决定的明显理由,也许它只是对数字分隔符的字面解释。

请注意,我们可以从 Where do I find the current C or C++ standard documents? 中找到标准草案列表。 .

关于c++ - 十六进制或二进制数中的数字之前是否允许使用数字分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com