2015-09-14 4 views
7

C++ 14では、数字セパレータの概念がリテラルに導入され、3'141'592'653'589の行に沿っています。今これは偉大な読み取り可能なコードの機能ですが、の前に0x/0b型リテラルの数値部分が許可されているのかどうか疑問に思っていました。それがはっきり数字からベースを描くため16進数または2進数の数字の前に桁区切り文字を使用できますか?

unsigned int topThreeBits = 0b1110'0000; 
unsigned int hexNum  = 0xdead'beef; 

unsigned int topThreeBits = 0b'1110'0000; 
unsigned int hexNum  = 0x'dead'beef; 

が有力セパレーターなしの1 よりも読みやすいです:ように私には思えます。

私はまだ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]から文法を見れば、それが適切な16進数またはバイナリリテラルの塩基指示薬後に許可されていません。

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 

我々はまた、Coliruや012などのC++ 14のコンパイラを提供、オンラインコンパイラのいずれかを使用してチェックすることができます。セパレータは塩基指示薬後に許可。

この変更を追跡した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を使ってきましたが、gcc 4.8.xはC++ 14ではないようです。 – paxdiablo

+0

8進数のインジケータを除きます。これは '0'の直後に許されます。 – hvd

+0

@hvd私はより具体的に説明されているはずでした、私は私の答えを更新しました。 –

関連する問題