Красивые номера форматирования в С++

В Ada можно записать числа с символами подчеркивания для разделения цифр, что значительно улучшает читаемость. Например: 1_000_000 (что эквивалентно 1000000) Есть ли аналогичный способ для С++?

EDIT: это вопрос об исходном коде, а не в/в.

Ответы

Ответ 1

С++ не поддерживает (в настоящее время) эту поддержку. Однако здесь есть два способа:

Ответ 2

В настоящее время нет возможности сделать это. Однако есть предложение ввести разделители цифр (N3499). Они еще не выбрали тот символ, который они хотели бы использовать в качестве разделителя. Текущие предложения:

  • Пробел: 4 815 162 342
  • Мощный акцент: 4`815`162`342
  • Одиночная цитата: 4'815'162'342
  • Подчеркивание: 4_815_162_342

К сожалению, все они имеют проблемы, описанные в предложении.

Вы можете использовать хакерский подход, используя пользовательский литерал:

long long operator "" _s(const char* cstr, size_t) 
{
    std::string str(cstr);
    str.erase(std::remove(str.begin(), str.end(), ','), str.end());
    return std::stoll(str);
}

int main()
{
    std::cout << "4,815,162,342"_s << std::endl;
}

Это напечатает:

4815162342

Он просто удаляет все запятые из данного литерала и преобразует его в целое число.

Ответ 3

int main()
{
   int x = 1e6;
}

Ответ 4

вы всегда можете просто определить переменный макрос, используемый как N(123,456,678). это немного больше проблем, чем это стоит. в частности, вам может потребоваться обход некоторых визуальных особенностей С++ для переносного кода для подсчета аргументов.

Ответ 5

То, что вы ищете, вполне возможно благодаря imbue() потоку ввода-вывода с соответствующим аспектом языка (в этом случае num_put).

(Предполагается, что вы говорите об I/O.Если вы говорите о самом источнике, это невозможно, как на С++ 11.)