Стандарт определяет общие базы?

strtol, например, принимает базу в качестве последнего аргумента

Я нахожу прохождение в магическом числе 10 во всем моем коде, чтобы быть непривлекательным. Десятичная база уже определена где-то в стандарте?

0

Решение

Я не думаю, что есть какое-либо стандартное базовое определение для использования с strtol, Однако есть альтернативные функции преобразования, которые имеют 10 в качестве аргумента по умолчанию для базы, такой как std::stoi который работает на std::stringс, и новый std::from_chars который работает на const char*s.

2

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

Я считаю, что передача магического числа 10 во всем коде не привлекательна.

Ты можешь использовать 0 за base и пусть реализация выводит базу.

auto v1 = strtol("101", nullptr, 0); // base is deduced to be 10
auto v2 = strtol("078", nullptr, 0); // base is deduced to be 8
auto v3 = strtol("0xF09", nullptr, 0); // base is deduced to be 16
1

Там нет десятичного базового значения по умолчанию, определенного для strtol, Вы можете создать свою собственную прокси-функцию, например:

long int strtolBase10(const char *nptr, char **endptr)
{
return strtol(nptr, endptr, 10);
}

Стоит отметить, что если вы используете специальное значение 0 в качестве базового параметра strtol будет анализироваться как десятичное число, если строка не начинается с «0x» или «0X» (она будет анализироваться в базе 16) или начинается с «0» (она будет анализироваться в базе 8).

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