Стандарт определяет общие базы? - PullRequest
0 голосов
/ 08 мая 2018

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

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

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Я считаю, что передача магического числа 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
0 голосов
/ 08 мая 2018

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

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

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

0 голосов
/ 08 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...