¿Cuál es la diferencia entre std :: atoi () y std :: stoi?

¿Cuál es la diferencia entre atoi y stoi ?

Lo sé,

 std::string my_string = "123456789"; 

Para convertir esa cadena a un número entero, tendría que hacer lo siguiente:

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

C ++ 11 ofrece un reemplazo breve:

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

1). ¿Hay alguna otra diferencia entre los dos?

2). Eficiencia y rendimiento sabio, ¿cuál es mejor?

3). ¿Cuál es más seguro de usar?

1). ¿Hay alguna otra diferencia entre los dos?

Encuentro std::atoi() una función horrible: devuelve cero en caso de error. Si considera cero como una entrada válida, no puede decir si hubo un error durante la conversión o si la entrada fue cero. Eso es simplemente malo. Ver por ejemplo ¿Cómo puedo saber si la función c atoi falló o si fue una cadena de ceros?

Por otro lado, la función C ++ correspondiente emitirá una excepción en caso de error. Puede distinguir correctamente los errores de cero como entrada.

2). Eficiencia y rendimiento sabio, ¿cuál es mejor?

Si no le importa la corrección o si está seguro de que no tendrá cero como entrada o si considera que es un error de todos modos, quizás las funciones C sean más rápidas (probablemente debido a la falta de manejo de excepciones). Depende de su comstackdor, su implementación de biblioteca estándar, su hardware, su entrada, etc. La mejor manera es medirlo. Sin embargo, sospecho que la diferencia, si la hay, es insignificante.

Si necesita una implementación rápida (pero fea al estilo C), ¿ la respuesta más actualizada al cómo analizar una cadena a un int en C ++? pregunta parece razonable. Sin embargo, no iría con esa implementación a menos que sea absolutamente necesario (principalmente debido a tener que meterme con la terminación char* y \0 ).

3). ¿Cuál es más seguro de usar?

Ver el primer punto.

Además de eso, si necesita trabajar con char* y estar atento a la terminación \0 , es más como cometer errores; std::string es mucho más fácil y seguro de trabajar, ya que se encargará de todas estas cosas.

    Intereting Posts