2015-09-14 81 views
7

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已經口授它將是一個數字文字。

+0

我只是想知道同樣的。正如答案所說,它不能完成(還沒有?)。因此,要獲得對稱數字/半字節/等,我們必須解決下一個最好的事情:'0b0'1110'0000'([hmm](https://sites.google.com/site/ohmusicstudent/_/rsrc/) 1315398151002/band-instruments/oboe/oboe-history/oboe2.gif))和'0x0'dead'beef'([omg](http://londonpride.com/wp-content/uploads/2013/09/Oxo__Beef________4c23b399c6687)。 jpg)) –

+0

@underscore_d,領先的'0'實際上是一個絕妙的主意,而不是我想到的。前導零對值沒有影響,它仍然允許視覺上不同的「實數部分」。 – paxdiablo

+0

是的,簡單但有效,有時候這樣的事情很容易錯過:-) –

回答

8

如果我們看一下語法從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或012中的一個。

跟蹤此更改的Evolution工作組問題是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?找到標準草案的列表。

+0

謝謝你。不錯的鏈接也一樣,我一直在使用codingground,但是它只是出現在不是C++ 14的gcc 4.8.x中。 – paxdiablo

+0

不包括八進制基本指標。在'0'之後立即允許。 – hvd

+0

@ hvd我應該更多的指定,我更新了我的答案。 –

相關問題