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つの間に他の違いはありますか?
2)。効率とパフォーマンスのどちらが良いですか?
3)。どちらを使用する方が安全ですか?
1)。 2つの間に他の違いはありますか?
std::atoi()
は恐ろしい関数です。エラー時にゼロを返します。ゼロを有効な入力と見なすと、変換中にエラーが発生したか、入力がゼロであったかを判断できません。それはただ悪いです。たとえば、 c関数atoiが失敗したか、ゼロの文字列であったかをどのように確認しますか?
一方、対応するC++関数はエラー時に例外をスローします。入力としてゼロからエラーを適切に区別できます。
2)。効率とパフォーマンスのどちらが良いですか?
正確さを気にしない場合、または入力としてゼロがないことを確信している場合、またはとにかくエラーを考慮する場合は、おそらくC関数mightより高速になります(おそらく、例外処理が不足しているためです)。コンパイラ、標準ライブラリの実装、ハードウェア、入力などに依存します。最良の方法はそれを測定することです。ただし、違いがあるとしても、無視できる程度だと思います。
高速な(しかしいCスタイルの)実装が必要な場合、- 最も賛成の答えC++で文字列をintに解析する方法 の質問は妥当と思われます。ただし、どうしても必要な場合を除いて、その実装には行きません(主にchar*
および\0
終了)。
3)。どちらを使用する方が安全ですか?
最初のポイントを参照してください。
それに加えて、char*
および\0
終了、あなたは間違いを犯しやすい。 std::string
は、これらすべてを処理するため、作業がはるかに簡単で安全です。