ずっと整数で作業し、std::string
最後に a に変換する必要があります。
C++11 対応のコンパイラがある場合に機能するソリューションを次に示します。
#include <string>
std::string sum(std::string const & old_total, std::string const & input) {
int const total = std::stoi(old_total);
int const addend = std::stoi(input);
return std::to_string(total + addend);
}
それ以外の場合は、boostを使用します。
#include <string>
#include <boost/lexical_cast.hpp>
std::string sum(std::string const & old_total, std::string const & input) {
int const total = boost::lexical_cast<int>(old_total);
int const addend = boost::lexical_cast<int>(input);
return boost::lexical_cast<std::string>(total + addend);
}
この関数は、最初にそれぞれを に変換std::string
しint
(どのようなアプローチをとっても、実行しなければならないステップです)、それらを追加してから に戻しstd::string
ます。PHP のように、意味を推測して追加しようとする他の言語では、いずれにせよ、内部でこれを行っています。
これらのソリューションには両方とも多くの利点があります。それらはより高速であり、黙って動作しているように見えるのではなく、例外とともにエラーを報告し、追加の中間変換を必要としません。
Boost ソリューションのセットアップには少し手間がかかりますが、その価値は間違いなくあります。Boost はおそらく、C++ 開発者にとって最も重要なツールですが、おそらくコンパイラは例外です。彼らはすでに一流の仕事をしており、あなたが将来直面するであろう多くの問題を解決しているので、あなたは他のことのためにそれを必要とするでしょう. Boost のインストールに必要な作業は、Boost を使用することで節約できる時間よりもはるかに少なくなります。