在十六进制或二进制数字的数字之前是否允许数字分隔符?

pax*_*blo 7 c++ c++14 digit-separator

C++ 14将数字分隔符的概念引入文字中3'141'592'653'589.现在这是可读代码的一个很棒的功能,但我想知道它是否允许0x/0b -type文字的数字部分之前引用.在我看来,这:

unsigned int topThreeBits = 0b'1110'0000;
unsigned int hexNum       = 0x'dead'beef;
Run Code Online (Sandbox Code Playgroud)

没有前导分隔符的那个更可读:

unsigned int topThreeBits = 0b1110'0000;
unsigned int hexNum       = 0xdead'beef;
Run Code Online (Sandbox Code Playgroud)

因为它清楚地描述了数字的基数.

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

我知道对于未加前缀的数字没有意义'123'456,特别是因为解析器不知道它是char变量还是数字文字.

但是,对于带前缀的文字,我看不出有关令牌在第一次'到达时的意图有什么混淆- 0x/0b已经说明它将是一个数字文字.

Sha*_*our 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
Run Code Online (Sandbox Code Playgroud)

虽然,八进制文字确实允许基本指标后面的分隔符:

octal-literal:
  0
  octal-literal ’opt octal-digit
Run Code Online (Sandbox Code Playgroud)

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

追踪这一变化的进化工作组问题是问题27:N3781单引号标记作为数字分离器,N3661,N3499数字分离器,N3448无痛数字分离.我没有看到这个设计决定的明显理由,也许它只是对数字分隔符的字面解释.

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