Разрешены ли разделители цифр перед цифрами в шестнадцатеричном или двоичном числе?

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 уже продиктовал это будет числовой литерал.

7

Решение

Если мы посмотрим на грамматику из черновик стандарта C ++ 14: N4140 раздел 2.14.2 [словарный запас], он не допускается сразу после базового индикатора шестнадцатеричных или двоичных литералов:

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 или же Wandbox.

Проблема рабочей группы Evolution, которая отслеживала это изменение, была выпуск 27: одиночная кавычка N3781 в качестве разделителя цифр, N3661, разделители цифр N3499, разделение цифр безболезненно N3448. Я не вижу очевидного обоснования этого дизайнерского решения, возможно, это только буквальная интерпретация разделитель цифр.

Обратите внимание, что мы можем найти список проектов стандартов от Где я могу найти текущие стандартные документы C или C ++?.

8

Другие решения


По вопросам рекламы [email protected]