В чем разница между 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
намного проще и безопаснее работать, так как он позаботится обо всех этих вещах.