2

次のコードを参照してください。debug と show convert は iPhone シミュレーターとデバイス (4S) の両方で成功していますが、どのように機能するのでしょうか? http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/を参照してください。boost::int64_t のオーバーロード関数はありません。

この関数を使用して任意の boost::int64_t 型を変換すると、リスクはありますか? 前もって感謝します。

std::stringstream mySS;
boost::int64_t large = 4294967296889977;
mySS<<large;
std::string str = mySS.str(); 
4

1 に答える 1

2

それが機能する理由は、boost:int64_t実際には組み込み型(通常はstd::int64_tで定義されてcstdintいるかそのようなもの)に対するtypedefであるため、おそらく同じlong long(またはプラットフォームによっては類似)になる可能性があります。もちろん、stringstream::operator<<そのための過負荷があります。

正確な定義については、boost/cstdint.hpp(1.51バージョン)を参照してください。

これが一般的にすべての主要なプラットフォームで機能すると仮定することは、おそらく比較的安全な賭けです。しかし、私は誰もがそれを保証できるとは思えません。

使用の目的がstd::stringstream整数と文字列の間の変換である場合、実行できる最も安全な方法は、Boost独自の変換方法boost::lexical_cast(1.51バージョン)を使用することです。これがどのように行われるかです:

#include <iostream>
#include <boost/cstdint.hpp>
#include <boost/lexical_cast.hpp>

int main()
{
  boost::int64_t i = 12;
  std::string    s = boost::lexical_cast<std::string>(i);

  std::cout << s << std::endl;
  return 0;
}
于 2012-10-30T03:40:48.477 に答える