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已经说明它将是一个数字文字.
如果我们从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编译器的在线编译器进行检查,例如Coliru或Wandbox.
追踪这一变化的进化工作组问题是问题27:N3781单引号标记作为数字分离器,N3661,N3499数字分离器,N3448无痛数字分离.我没有看到这个设计决定的明显理由,也许它只是对数字分隔符的字面解释.
请注意,我们可以从哪里找到当前的C或C++标准文档中的草案标准列表?.
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |