Was ist der Unterschied zwischen std :: atoi () und std :: stoi?
Was ist der Unterschied zwischen atoi
und stoi
?
Ich weiß,
std::string my_string = "123456789";
Damit konvertieren Sie die Zeichenfolge in eine ganze Zahl, die Sie würde tun müssen, die folgenden:
const char* my_c_string = my_string.c_str();
int my_integer = atoi(my_c_string);
C++11 bietet eine prägnante Ersatz:
std::string my_string = "123456789";
int my_integer = std::stoi(my_string);
1). Gibt es irgendwelche anderen Unterschiede zwischen den beiden?
2). Effizienz und Leistung klug, welches ist besser?
3). Was ist sicherer zu verwenden?
InformationsquelleAutor der Frage Bhupesh Pant | 2013-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finde ich
std::atoi()
eine schreckliche Funktion: Es gibt null bei einem Fehler. Wenn man bedenkt, null als gültige Eingabe, dann kann man nicht sagen, ob es einen Fehler während der Konvertierung oder den Eingang " zero. Das ist einfach nur schlecht. Siehe zum Beispiel Wie kann ich feststellen, ob die c-Funktion atoi fehlgeschlagen ist oder wenn es eine Folge von Nullen?Auf der anderen Seite, wird der entsprechende C++ - Funktion wird eine exception im Fehlerfall. Sie können richtig unterscheiden Fehler von null als Eingabe.
Wenn Sie nicht kümmern, über die Richtigkeit oder Sie wissen sicher, dass Sie nicht null als Eingabe-oder man bedenkt, dass Fehler sowieso, dann vielleicht der C-Funktionen könnte schneller sein (wahrscheinlich aufgrund des Fehlens von exception handling). Es hängt von Ihrem compiler, Ihre standard-Bibliothek Implementierung, Ihre hardware, Ihre Anregungen, etc. Der beste Weg ist, um Sie zu Messen. Ich vermute aber, dass der Unterschied, falls überhaupt vorhanden, vernachlässigbar ist.
Wenn Sie brauchen eine schnelle (aber hässlichen C-Stil) Implementierung, die meisten von Ihnen positiv bewertet werden Antwort der Wie wertet einen string mit einem int-Datentyp in C++? Frage scheint vernünftig. Jedoch würde ich nicht gehen mit, dass die Umsetzung, wenn es unbedingt nötig ist (vor allem, weil er zu Durcheinander mit
char*
und\0
Kündigung).Siehe den ersten Punkt.
Zusätzlich zu, dass, wenn Sie brauchen, um die Arbeit mit
char*
und aufpassen\0
Kündigung, du bist mehr Fehler zu machen;std::string
ist viel einfacher und sicherer zu arbeiten, als es kümmert sich um alle diese Sachen.InformationsquelleAutor der Antwort Ali