Вот такой код выводит "10" в консоль (VS2017):
#include <iostream>
int main() {
int a = std::atoi("010");
std::cout << a << std::endl;
}
Т.е. ведущий ноль игнорируется, но на сколько это стандартизировано?
Здесь и здесь не нашел.
Согласно стандарту С11 функция int atoi(const char *nptr); эквивалентна (int)strtol(nptr, (char **)NULL, 10) за исключением поведения при ошибке.
В описании последней помимо прочего сказано:
... only letters and digits whose ascribed values are less than that of base are permitted.
0 является валидной десятичной цифрой, таким образом наличие предшествующих нулей не должно влиять на результат вызова.
Наличие нуля в начале могло бы влиять при автоматическом определении основания системы счисления, т.е. при указании base = 0, но для atoi это не актуально.
Это стандарту соответствует - atoi работает с десятичным представлением.
Если хотите, чтобы префикс 0 означал восьмеричное значение, а 0x - шестнадцатеричное - посмотрите, например, в сторону stoi или strtol с указанием основания системы счисления 0.
P.S. Кстати, по вашей же ссылке четко сказано -
takes an optional initial plus or minus sign followed by as many base-10 digits as possible, and interprets them as a numerical value.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей