十六进制或二进制数中的数字之前是否允许使用数字分隔符?
Are digit separators allowed before the digits in a hex or binary number?
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
变量还是数字文字.
但是,对于带前缀的文字,我看不到第一个 '
到达时令牌的含义有任何混淆 - 0x/0b
已经规定了它是将是一个数字文字。
如果我们从draft C++14 standard: N4140部分看语法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 编译器的在线编译器之一进行检查,例如 Coliru or Wandbox。
跟踪此更改的 Evolution Working Group 问题是 issue 27: N3781 Single-Quotation-Mark as a Digit Separator, N3661, N3499 Digit Separators, N3448 Painless Digit Separation。我没有看到这个设计决定的明显理由,也许它只是 digit separator.
的字面解释
请注意,我们可以从 Where do I find the current C or C++ standard documents? 中找到标准草案列表。
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
变量还是数字文字.
但是,对于带前缀的文字,我看不到第一个 '
到达时令牌的含义有任何混淆 - 0x/0b
已经规定了它是将是一个数字文字。
如果我们从draft C++14 standard: N4140部分看语法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 编译器的在线编译器之一进行检查,例如 Coliru or Wandbox。
跟踪此更改的 Evolution Working Group 问题是 issue 27: N3781 Single-Quotation-Mark as a Digit Separator, N3661, N3499 Digit Separators, N3448 Painless Digit Separation。我没有看到这个设计决定的明显理由,也许它只是 digit separator.
的字面解释请注意,我们可以从 Where do I find the current C or C++ standard documents? 中找到标准草案列表。