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
はすでに数値リテラルになるように指示しています。
私はちょうど同じ疑問に思った。答えが言うように、それはできません(まだですか?)。対称的な数値/ニブル/等を取得するには、次の最良のものを解決する必要があります: '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)) –
@underscore_d、先行する '0'は実際には私が考えていたものではない素晴らしいアイデアです。先頭のゼロは値に影響を与えず、視覚的に異なる「実数部分」を許容します。 – paxdiablo
うん、シンプルだが効果的で、ときにはそのようなことが見逃しやすい:-) –