web-dev-qa-db-ja.com

c ++ integer-> std :: string変換。シンプルな機能?

問題:整数があります。この整数は、stl :: string型に変換する必要があります。

過去に、私はstringstreamを使用して変換を行ってきましたが、それはちょっと面倒です。 Cの方法はsprintfを行うことですが、タイプセーフなC++メソッドを実行したいです。

これを行うためのより良い方法はありますか?

過去に使用したstringstreamアプローチは次のとおりです。

std::string intToString(int i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

もちろん、これは次のように書き換えることができます。

template<class T>
std::string t_to_string(T i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

ただし、これはかなり「重い」実装であるという考えがあります。

Zanは、呼び出しは非常に素晴らしいと指摘しましたが、

std::string s = t_to_string(my_integer);

とにかく、もっと良い方法は...いいでしょう。

関連する:

整数を文字列C++に変換するためのitoa()の代替

76
Paul Nathan

今、C++ 11では

#include <string>
string s = std::to_string(123);

参照へのリンク: http://en.cppreference.com/w/cpp/string/basic_string/to_string

134

前述したように、lexical_castをブーストすることをお勧めします。それはかなりいい構文を持っているだけではありません:

#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);

また、いくつかの安全性も提供します。

try{
  std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
 ...
}
28
Mic

実際には、標準ではありません。一部の実装には非標準のitoa()関数があり、Boostのlexical_castを調べることができますが、標準に固執する場合は、stringstreamとsprintf()を選択することができます(もしあれば、snprintf())。

22
David Thornley