Красивые номера форматирования в С++
В 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.)