В чем разница между std::atoi() и std::stoi?

в чем разница между atoi и stoi?

Я знаю,

std::string my_string = "123456789";

чтобы преобразовать эту строку в целое число, вам нужно будет сделать следующее:

const char* my_c_string = my_string.c_str(); 
int my_integer = atoi(my_c_string);

C++11 предлагает краткую замену:

std::string my_string = "123456789"; 
int my_integer = std::stoi(my_string);

1). Есть ли другие различия между ними?

2). Эффективность и производительность мудрый, какой из них лучше?

3). Что безопаснее использовать?

1 ответов


1). Есть ли другие различия между ними?

найти std::atoi() ужасная функция: она возвращает ноль в случае ошибки. Если вы считаете ноль допустимым входом, то вы не можете сказать, была ли ошибка во время преобразования или вход был равен нулю. Это просто плохо. См., например,как я могу сказать, если функция c atoi не удалась или если это была строка нулей?

С другой стороны, соответствующая функция C++ будет исключение при ошибке. Вы можете правильно отличить ошибки от нуля в качестве входных данных.

2). Эффективность и производительность мудрый, какой из них лучше?

если вас не волнует правильность или вы точно знаете, что у вас не будет нуля в качестве входных данных, или вы считаете это ошибкой в любом случае, тогда, возможно, функции C может быть быстрее (вероятно, из-за отсутствия обработки исключений). Это зависит от вашего компилятора, стандартной библиотеки реализация, ваше оборудование, ваш вход и т. д. Лучший способ-измерить его. Однако я подозреваю, что разница, если она есть, незначительна.

Если вам нужна быстрая (но уродливая C-style) реализация,в наиболее upvoted ответ до как разобрать строку на int в C++? вопрос кажется разумным. Однако я бы не пошел с этой реализацией, если бы это не было абсолютно необходимо (в основном из-за необходимости возиться с char* и окончание.)

3). Что безопаснее использовать?

см. Первый пункт.

в дополнение к этому, если вам нужно работать с char* и следить за прекращение, вы больше любите делать ошибки;std::string намного проще и безопаснее работать, так как он позаботится обо всех этих вещах.