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

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

1 ответ

Решение

Если мы посмотрим на грамматику из черновика стандарта 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

Хотя восьмеричные литералы допускают разделитель после базового индикатора:

octal-literal:
  0
  octal-literal ’opt octal-digit

Мы также можем проверить с помощью одного из онлайн-компиляторов, которые предоставляют компиляторы C++14, такие как Coliru или Wandbox.

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

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

Другие вопросы по тегам