7

C++14 将数字分隔符的概念引入到文字中,类似于3'141'592'653'589. 现在这是可读代码的一个很好的功能,但我想知道它是否允许在-type 文字的数字部分之前使用引号。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已经规定它将是一个数字文字。

4

1 回答 1

8

如果我们从C++14 标准草案中查看语法: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 编译器(如ColiruWandbox )的在线编译器之一进行检查。

跟踪此更改的 Evolution 工作组问题是问题 27:N3781 单引号作为数字分隔符、N3661、N3499 数字分隔符、N3448 无痛数字分隔符。我没有看到这个设计决定的明显理由,也许它只是对digit separator的字面解释。

请注意,我们可以从哪里可以找到当前的 C 或 C++ 标准文档?.

于 2015-09-14T03:14:12.117 回答